Symfob娱乐下载ony2和Symfony1有什么不同

编辑本页

警告:您正在浏览的文档欧宝官网下载appob娱乐下载Symfony 2.3,现已不再维护。

本页的更新版本用于Syob娱乐下载mfony 6.2(当前稳定版本)。

Symfob娱乐下载ony2和Symfony1有什么不同

与框架的ob娱乐下载第一个版本相比,Symfony2框架体现了一个重要的演变。幸运的是,以MVC架构为核心,在Symfony2中开发时,用于掌握symfony1项目的技能仍然非常相关。ob娱乐下载肯定的是,app.yml已经消失了,但是路由、控制器和模板都保留了下来。

本章介绍symfony1和Symfony2之间的区别。ob娱乐下载正如您将看到的,许多任务都是以稍有不同的方式处理的。在Symfony2应用程序中促进稳定、可预测、可测试和解耦的代码时,您将逐渐欣赏这些微小的差异。ob娱乐下载

所以,坐下来放松一下,从“那时”到“现在”。

目录结构

在查看Symfony2项目时,例如ob娱乐下载ob娱乐下载Symfony标准版-你会注意到一个与symfony1非常不同的目录结构。ob娱乐下载然而,这些差异在某种程度上是肤浅的。

app /目录

在syob娱乐下载mfony1中,您的项目有一个或多个应用程序,并且每个应用程序都位于应用程序/目录(例如。应用程序/前端).在Symfony2中默认情况ob娱乐下载下,只有一个应用程序由app /目录中。就像在symfoob娱乐下载ny1中app /目录包含特定于该应用程序的配置。它还包含特定于应用程序的缓存、日志和模板目录以及内核类(AppKernel),它是表示应用程序的基对象。

与symfonob娱乐下载y1不同,几乎没有PHP代码存在于app /目录中。这个目录不像在symfony1中那样用来存放模块或库文件。ob娱乐下载相反,它只是配置和其他资源(模板、翻译文件)的家。

src /目录

简单地说,您的实际代码放在这里。在Syob娱乐下载mfony2中,所有实际的应用程序代码都位于一个包中(大致相当于symfony1插件),并且默认情况下,每个包都位于src目录中。这样,src目录有点像插件目录在symfony1中,ob娱乐下载但是更加灵活。此外,虽然你的捆会住在src /目录,第三方包将存在于供应商/目录中。

为了更好地了解src /目录,首先考虑symfony1应用程序的结构。ob娱乐下载首先,部分代码可能存在于一个或多个应用程序中。最常见的包括模块,但也可以包括您放入应用程序中的任何其他PHP类。您可能还创建了一个schema.yml配置您的项目目录和构建的几个模型文件。最后,为了帮助实现一些常见功能,您将使用一些第三方插件插件/目录中。换句话说,驱动应用程序的代码存在于许多不同的地方。

在Syob娱乐下载mfony2中,生活简单得多,因为所有ob娱乐下载Symfony2代码必须存在于一个bundle中。在假装symfony1项目中,ob娱乐下载所有的代码可以移动到一个或多个插件中(实际上,这是一个非常好的实践)。假设所有模块、PHP类、模式、路由配置等都被移动到一个插件symfony1中ob娱乐下载插件/目录将非常类似于Symfony2ob娱乐下载src /目录中。

简单地说,就是src /目录是存放您的代码、资产、模板和大多数特定于项目的东西的地方。

供应商/目录

供应商/目录基本上相当于lib /供应商/symfony1中的目录,ob娱乐下载这是所有供应商库和包的常规目录。默认情况下,你会在这个目录中找到Symfony2库文件,ob娱乐下载以及其他一些依赖的库,如Doctrine2, Twig和Swift Mailer供应商/

web /目录

并没有太大的变化web /目录中。最明显的区别是没有css /js /而且图像/目录。这是故意的。与PHP代码一样,所有资产也应该位于一个包中。在控制台命令的帮助下,资源/公共/目录复制或符号链接到web /包/目录中。这允许您在包中组织资产,但仍然使它们对公众可用。为了确保所有的bundle都是可用的,运行以下命令:

1
$ PHP应用/控制台资产:安装web

请注意

这个命令相当于symfony1ob娱乐下载插件:发布资产命令。

半自动的

现代框架的优点之一是永远不需要担心需要文件。通过使用自动加载器,您可以引用项目中的任何类,并相信它是可用的。Symfony2中的自动加载已经改变,变得更加通用、更ob娱乐下载快,并且不需要清除缓存。

在syob娱乐下载mfony1中,自动加载是通过在整个项目中搜索PHP类文件并将这些信息缓存到一个巨大的数组中来完成的。该数组确切地告诉symfony1ob娱乐下载哪个文件包含每个类。在生产环境中,这导致在添加或移动类时需要清除缓存。

在Syob娱乐下载mfony2中,一个名为作曲家处理此进程。自动加载器背后的思想很简单:类的名称(包括名称空间)必须与包含该类的文件的路径匹配。以Symfony2标准版中的FrameworkExtraBundle为例:ob娱乐下载

1 2 3 4 5 6 7 8 9
名称空间Sensio赞助FrameworkExtraBundle使用ob娱乐下载组件HttpKernel/ /……SensioFrameworkExtraBundle扩展/ /……

文件本身位于供应商/ sensio赞助/ framework-extra-bundle / sensio赞助/包/ FrameworkExtraBundle / SensioFrameworkExtraBundle.php.可以看到,路径的第二部分紧跟类的名称空间。第一部分等于sensioframeworkextrabundance的包名。

名称空间,Sensio赞助\包\ FrameworkExtraBundle,和包名,sensio赞助/ framework-extra-bundle,说明文件应位于的目录(供应商/ sensio赞助/ framework-extra-bundle / sensio赞助/包/ FrameworkExtraBundle /).然后Composer可以在这个特定的位置查找文件并快速加载它。

如果文件有住在这个地方,你会收到类“Sensio\Bundle\ frameworkextr丰le\ sensioframeworkextr丰le”不存在。错误。在Syob娱乐下载mfony2中,“类不存在”错误意味着类的名称空间和物理位置不匹配。基本上,Symfonyob娱乐下载2在一个确切的位置寻找类,但是这个位置不存在(或者包含一个不同的类)。为了让一个类被自动加载,你永远不需要清除缓存在Syob娱乐下载mfony2。

如前所述,对于自动装弹机的工作,它需要知道Sensio赞助命名空间位于供应商/ sensio赞助/ framework-extra-bundle目录和,例如学说命名空间位于供应商/理论/ orm / lib /目录中。这个映射完全由Composer控制。通过Composer加载的每个第三方库都定义了它的设置,Composer会为您处理一切。

为实现这一点,项目使用的所有第三方库必须在composer.json文件。

如果你看HelloController从Symfony标ob娱乐下载准版你可以看到它生活在Acme \ DemoBundle \控制器名称空间。但是,AcmeDemoBundle没有在您的composer.json文件。尽管如此,文件是自动加载的。这是因为你可以告诉Composer从特定目录自动加载文件,而不需要定义依赖项:

1 2 3 4 5
“自动”: {“psr-0”: {""“src /”}}}

类中没有找到类供应商目录,Composer将在src目录前抛出“类不存在”异常。中配置Composer自动加载器的详细信息Composer文档欧宝官网下载app

使用控制台

在syob娱乐下载mfony1中,控制台位于项目的根目录中,并被调用ob娱乐下载

1
$ PHP ob娱乐下载symfony

在Syob娱乐下载mfony2中,控制台现在位于app子目录中,并被调用控制台

1
$ PHP应用/控制台

应用程序

在symfob娱乐下载ony1项目中,通常有几个应用程序:例如,一个用于前端,一个用于后端。

在Symfob娱乐下载ony2项目中,您只需要创建一个应用程序(博客应用程序、内部网应用程序……)。大多数情况下,如果您想创建第二个应用程序,您可能会创建另一个项目,并在它们之间共享一些包。

如果需要分离某些包的前端和后端特性,可以为控制器创建子名称空间,为模板创建子目录,创建不同的语义配置、单独的路由配置等等。

当然,在您的项目中拥有多个应用程序并没有什么错,这完全取决于您。第二个应用程序意味着一个新的目录,例如。my_app /,其基本设置与app /目录中。

提示

阅读a的定义项目,一个应用程序,以及在词汇表中。

包和插件

在symfob娱乐下载ony1项目中,一个插件可以包含配置、模块、PHP库、资产和任何与项目相关的东西。在Syob娱乐下载mfony2中,插件的概念被“包”所取代。捆绑包甚至比插件更强大,因为Symfony2框架的核心是通过一系列捆绑包引入的。ob娱乐下载在Syob娱乐下载mfony2中,包是非常灵活的一等公民,甚至核心代码本身也是包。

在syob娱乐下载mfony1中,一个插件必须在ProjectConfiguration类:

1 2 3 4 5 6
/ /配置/ ProjectConfiguration.class.php公共函数设置()//这里有一些插件->enableAllPluginsExcept (数组(…));}

在Syob娱乐下载mfony2中,bundle在应用程序内核中被激活:

12 3 4 5 6 7 8 9 10 11 12
/ / app / AppKernel.php公共函数registerBundles()数组ob娱乐下载Symfony \包\ FrameworkBundle \ FrameworkBundle (),ob娱乐下载Symfony \包\ TwigBundle \ TwigBundle(),…Acme \ DemoBundle \ AcmeDemoBundle ());返回;}

路由(routing.yml)及配置(config.yml

在syob娱乐下载mfony1中,routing.yml而且app.yml配置文件会自动加载到任何插件中。在Syob娱乐下载mfony2中,必须手动包含包中的路由和应用程序配置。例如,要从名为AcmeDemoBundle的包中包含路由资源,您可以执行以下操作:

  • YAML
  • XML
  • PHP
1 2 3
# app / config / routing.yml_hello:资源:“@AcmeDemoBundle /资源/ config / routing.yml”

方法中找到的路由资源/ config / routing.ymlAcmeDemoBundle文件。特殊的@AcmeDemoBundle是一种快捷语法,在内部解析为该包的完整路径。

你可以使用同样的策略从bundle中引入配置:

  • YAML
  • XML
  • PHP
1 2 3
# app / config / config.yml进口:-资源:“@AcmeDemoBundle /资源/ config / config.yml”

在Syob娱乐下载mfony2中,配置有点像app.yml在syob娱乐下载mfony1中,除了更加系统化。与app.yml,你可以简单地创建任何你想要的键。默认情况下,这些条目是没有意义的,完全取决于你在应用程序中如何使用它们:

1 2 3 4
# symfony1中的一些app.yml文件ob娱乐下载全部:电子邮件:from_address:“foo.bar@example.com”

在Syob娱乐下载mfony2中,还可以在参数您的配置键:

  • YAML
  • XML
  • PHP
1 2
参数:email.from_address:“foo.bar@example.com”

你现在可以从控制器访问它,例如:

1 2 3 4
公共函数helloAction的名字fromAddress->容器->getParameter (“email.from_address”);}

实际上,Symfony2配置要强ob娱乐下载大得多,主要用于配置您可以使用的对象。有关更多信息,请参阅“服务容器".

此工作,包括代码示例,是根据创作共用BY-SA 3.0许可证。