捆绑系统

编辑本页

警告:您正在浏览的文档欧宝体育电话欧宝娱乐app下载地址Symfony 3.0,现已不再维护。

本页的更新版本用于Sy欧宝娱乐app下载地址mfony 6.2(当前稳定版本)。

捆绑系统

捆绑包类似于其他软件中的插件,但甚至更好。关键的区别在于一切是Symfony中的一个包,包欧宝娱乐app下载地址括核心框架功能和为应用程序编写的代码。捆绑包是Symfony的一等公民。欧宝娱乐app下载地址这使您可以灵活地使用打包的预构建特性第三方包或者自己分发包裹。它使您可以很容易地在应用程序中选择要启用的特性,并按照您想要的方式优化它们。

请注意

虽然您将在这里学习基础知识,但将有一整篇文章专门讨论组织和最佳实践

捆绑包只是一个目录中实现单个特性的结构化文件集。你可以创建一个BlogBundle, ForumBundle或者一个用于用户管理的bundle(其中很多已经作为开源bundle存在了)。每个目录都包含与该特性相关的所有内容,包括PHP文件、模板、样式表、JavaScript文件、测试等等。一个特性的每个方面都存在于一个包中,并且每个特性都生活在一个包中。

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

12 3 4 5 6 7 8 9 10 11 12 13 14 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).

创建Bundle

Symf欧宝娱乐app下载地址ony标准版提供了一个方便的任务,可以为您创建一个功能齐全的包。当然,手工创建一个bundle也非常简单。

为了向您展示捆绑包系统有多简单,创建一个名为AcmeTestBundle的新捆绑包并启用它。

提示

Acme部分只是一个虚假的名称,它应该被一些代表您或您的组织的“供应商”名称所取代(例如,ABCTestBundle代表一些公司名称美国广播公司).

首先创建一个src / Acme / TestBundle /目录,并添加一个名为AcmeTestBundle.php

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

提示

名称AcmeTestBundle遵循标准Bundle命名约定.您还可以通过将这个类命名为TestBundle(并命名文件)来选择将包的名称缩短为简单的TestBundleTestBundle.php).

这个空类是创建新包所需的唯一部分。虽然通常是空的,但这个类功能强大,可以用来自定义包的行为。

创建了包之后,可以通过AppKernel类:

12 3 4 5 6 7 8 9 10 11 12 13
/ / app / AppKernel.php公共函数registerBundles()数组/ /……//注册你的bundleAcme \ TestBundle \ AcmeTestBundle ());/ /……返回;}

虽然它还没有做任何事情,但AcmeTestBundle现在已经可以使用了。

这很简单,Symfony还提供了一个命令行界面来欧宝娱乐app下载地址生成一个基本的bundle框架:

1
$ php bin/console generate:bundle——namespace=Acme/TestBundle

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

提示

无论何时创建新包或使用第三方包,始终确保该包已在中启用registerBundles ().当使用生成:包命令,这已经为您完成了。

Bundle目录结构

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

控制器/
包含bundle的控制器(例如。RandomController.php).
DependencyInjection /
保存某些依赖注入扩展类,可以导入服务配置,注册编译器通道或更多(这个目录不是必需的)。
资源/ config /
保存配置,包括路由配置(例如:routing.yml).
资源/视图/
保存按控制器名称组织的模板(例如:你好/ index.html.twig).
资源/公共/
包含web资产(图像,样式表等),并被复制或象征性链接到项目中web /通过资产:安装控制台命令。
测试/
保存包的所有测试。

一个bundle可以和它实现的特性一样大或一样小。它只包含您需要的文件,没有其他内容。

在阅读指南的过程中,您将学习如何将对象持久化到数据库、创建和验证表单、为应用程序创建翻译、编写测试等等。每个组件在包中都有自己的位置和角色。

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