包系统

编辑该页面

警告:你浏览的文档欧宝体育电话欧宝娱乐app下载地址Symfony 2.8,不再维护。

这个页面的更新版本Symf欧宝娱乐app下载地址ony 6.2(当前的稳定版本)。

包系统

一捆是类似于其他软件插件,但更好。关键的区别是,一切是Symfony的包,包括核心欧宝娱乐app下载地址框架的功能和应用程序的编写的代码。包在Symfony一等公民。欧宝娱乐app下载地址这使您可以灵活地使用预构建功能打包第三方包或分发自己的包。使它容易挑选这档节目的特点就是在应用程序中启用和你所希望的方式来优化它们。

请注意

当你将学习基础知识,整个文章的组织和最佳实践

包只是一套结构化的文件在一个目录中,实现一个功能。您可以创建一个BlogBundle, ForumBundle或包用户管理(其中许多已经存在开源包)。每个目录包含所有相关的功能,包括PHP文件、模板、样式表、JavaScript文件,测试和其他。功能的方方面面存在于一个包,住在每个特性包。

在您的应用程序中使用的包必须通过注册在启用registerBundles ()的方法AppKernel类:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
/ / app / AppKernel.php公共函数registerBundles(){美元=数组(欧宝娱乐app下载地址Symfony \包\ FrameworkBundle \ FrameworkBundle (),欧宝娱乐app下载地址Symfony \包\ SecurityBundle \ SecurityBundle (),欧宝娱乐app下载地址Symfony \包\ TwigBundle \ TwigBundle (),欧宝娱乐app下载地址Symfony \包\ MonologBundle \ MonologBundle (),欧宝娱乐app下载地址Symfony \包\ SwiftmailerBundle \ SwiftmailerBundle (),欧宝娱乐app下载地址Symfony \包\ DoctrineBundle \ DoctrineBundle (),Sensio赞助\包\ FrameworkExtraBundle \ SensioFrameworkExtraBundle (),AppBundle \ AppBundle ());如果(in_array (美元- >getEnvironment (),数组(“开发”,“测试”))){美元[]=欧宝娱乐app下载地址Symfony \包\ WebProfilerBundle \ WebProfilerBundle ();美元[]=Sensio赞助\包\ DistributionBundle \ SensioDistributionBundle ();美元[]=Sensio赞助\包\ GeneratorBundle \ SensioGeneratorBundle ();}返回美元;}

registerBundles ()方法,你有完全控制哪些包所使用的应用程序(包括核心Symfony包)。欧宝娱乐app下载地址

提示

一捆可以活在任何地方只要它可以自动装载(通过自动装卸机配置app / autoload.php)。

创建一个包

SensioGeneratorBundle是一个可选包,包括应用程序的命令来创建不同的元素,比如包。如果您创建大量的包,可以考虑使用它。然而,这部分手工创建并启用了一个新的包显示是多么简单。

新包叫做AcmeTestBundle,Acme部分只是一个虚拟的名字应该被一些“供应商”的名字,代表您或您的组织(例如ABCTestBundle公司命名美国广播公司)。

首先创建一个src / Acme / TestBundle /目录,添加一个新文件AcmeTestBundle.php:

1 2 3 4 5 6 7 8
/ / src / Acme / TestBundle / AcmeTestBundle.php名称空间Acme\TestBundle;使用欧宝娱乐app下载地址\组件\HttpKernel\\;AcmeTestBundle扩展{}

提示

AcmeTestBundle遵守标准的名称包的命名约定。你也可以选择缩短包的名称简单TestBundle命名该类TestBundle(和命名的文件TestBundle.php)。

这块空类是唯一你需要创建新的包。尽管通常空的,这类是强大的,可以用来定制包的行为。

现在您已经创建了包,使其通过AppKernel类:

1 2 3 4 5 6 7 8 9 10 11 12
/ / app / AppKernel.php公共函数registerBundles(){美元=数组(/ /……/ /注册你的包Acme \ TestBundle \ AcmeTestBundle ());/ /……返回美元;}

虽然它不做任何事,但AcmeTestBundle现在已经准备好被使用。

像这是那么容易,Symfony还提供了一个命令行欧宝娱乐app下载地址界面生成一个基本的束骨架:

1
美元php应用程序/控制台生成:包= Acme / TestBundle——名称空间

束骨架生成一个基本的控制器,可以定制模板和路由资源。稍后您将了解更多关于Symfony命令行工具。欧宝娱乐app下载地址

提示

每当创建一个新包或使用第三方包,总是确保包已启用registerBundles ()。当使用生成:包命令,这样做是为了你。

包目录结构

包的目录结构简单、灵活。默认情况下,包系统遵循一组约定,帮助所有Symfony包之间保持代码一致。欧宝娱乐app下载地址看看AcmeDemoBundle,因为它包含了一些最常见的元素的包:

控制器/
包含包的控制器(如。RandomController.php)。
DependencyInjection /
持有一定的依赖注入扩展类,进口服务配置,编译器通过注册或更多(这个目录是没有必要的)。
资源/ config /
(如房屋配置,包括路由配置。routing.yml)。
资源/视图/
由控制器名称(如保存模板。随机/ index.html.twig)。
资源/公共/
包含网络资产(图像、样式表等)和复制或象征性地链接到这个项目中web /目录通过资产:安装控制台命令。
测试/
拥有所有的测试包。

一个包可以它实现了小型或者大型的特性。它只包含你所需要的文件。

当你移动通过指导,您将学习如何对象持久化到数据库中,创建和验证形式,为应用程序创建的翻译、编写测试和更多。每一个包中有自己的位置和作用。

这项工作,包括代码示例,许可下Creative Commons冲锋队3.0许可证。