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 /
目录中。
包和插件
在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.yml
AcmeDemoBundle文件。特殊的@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娱乐下载大得多,主要用于配置您可以使用的对象。有关更多信息,请参阅“服务容器".