如何使用最佳实践构建包

编辑该页面

警告:你浏览的文档欧宝官网下载appob娱乐下载Symfony 2.0,不再维护。

这个页面的更新版本Symfob娱乐下载ony 6.2(当前的稳定版本)。

如何使用最佳实践构建包

一个包是一个目录,一个定义良好的结构和可以主机类控制器和网络资源。即使包是很灵活的,你应该遵循如果你想分发他们的一些最佳实践。

包的名字

包也是一个PHP名称空间。名称空间必须遵循的技术互操作性标准PHP 5.3命名空间和类名:它开始于一个供应商,其次是零个或多个类别细分,以短名称的名称空间,它必须结束后缀。

一个名称空间变成一个包当你添加一个包类。包类名称必须遵循这些简单的规则:

  • 只使用字母数字字符和下划线;
  • 使用一个CamelCased名称;
  • 使用描述性和短名称(不超过2字);
  • 前缀的名称与连接供应商(和可选的类别名称空间);
  • 后缀的名字

这里有一些有效的包命名空间和类名:

名称空间 包类名
Acme \包\ BlogBundle AcmeBlogBundle
Acme \包\社会\ BlogBundle AcmeSocialBlogBundle
Acme \ BlogBundle AcmeBlogBundle

按照惯例,getName ()包类的方法应该返回的类名。

请注意

如果你公开分享你的包,你必须使用包类名称的名称存储库(AcmeBlogBundle而不是BlogBundle例如)。

请注意

ob娱乐下载Symfony2核心包不包类前缀ob娱乐下载而且总是添加一个次级名称空间;例如:FrameworkBundle

每个包都有一个别名,它是小写字母的简短版的包名称使用下划线(acme_helloAcmeHelloBundle,或acme_social_blogAcme \社会\ BlogBundle例如)。这个别名用于执行一个包的独特性(见下面的一些用法示例)。

目录结构

的基本目录结构HelloBundle包必须阅读如下:

1 2 3 4 5 6 7 8 9 10 11 12 13 14
XXX /……HelloBundle / HelloBundle。php配置控制器/资源/元/许可证/ doc /索引。rst /视图/公共/测试/翻译

XXX目录(ies)反映了包的名称空间结构。

以下文件是必需的:

  • HelloBundle.php;
  • 资源/元/许可证:完整的许可代码;
  • 资源/ doc / index.rst:包的根文件文档。欧宝官网下载app

请注意

这些约定确保自动化工具可以依靠这个默认结构工作。

子目录的深度应该保持最小的最常用类和文件在最高水平(2)。更多的水平可以定义非战略进程,文件。

包目录是只读的。如果你需要写临时文件,将它们存储在缓存/日志/主机应用程序的目录。工具可以生成包中的文件目录结构,但前提是生成的文件将存储库的一部分。

下面的类和文件有特定的阵地:

类型 目录
命令 命令/
控制器 控制器/
服务容器扩展 DependencyInjection /
事件监听器 EventListener /
配置 资源/ config /
Web资源 资源/公共/
翻译文件 资源/翻译/
模板 资源/视图/
单元测试和功能测试 测试/

包目录结构作为名称空间的层次结构。例如,一个HelloController控制器存储在包/ HelloBundle /控制器/ HelloController.php完全限定类名包\ \ HelloController HelloBundle \控制器

所有类和文件必须遵循Symfony2编码ob娱乐下载标准

一些类应被视为立面,应该尽可能短,像命令,帮手,侦听器,控制器。

类连接到事件分配器应该后缀为侦听器

应该存储在一个异常类异常sub-namespace。

供应商

一捆不能嵌入第三方PHP库。它应该依赖于标准Symfony2半自动的。ob娱乐下载

一捆不应该嵌入JavaScript编写的第三方库,CSS,或任何其他语言。

测试

包应该有一个测试套件用PHPUnit)和存储测试/目录中。测试应该遵循以下原则:

  • 测试套件必须与一个简单的可执行文件phpunit)命令从一个示例应用程序运行;
  • 功能测试应该只被用来测试响应输出和一些分析信息如果你有;
  • 测试应该覆盖至少95%的代码库。

请注意

一个测试套件必须不包含AllTests.php脚本,但是必须依靠的存在phpunit.xml.dist文件。

欧宝官网下载app

所有的类和函数必须有完整的PHPDoc。

丰富的文档也应该提供欧宝官网下载app的reStructuredText下格式,资源/ doc /目录;的资源/ doc / index.rst文件是唯一的强制性文件,必须文档的入口点。欧宝官网下载app

控制器

作为一项最佳实践,控制器的包要分发给其他人不得延长控制器基类。他们可以实现ContainerAwareInterface或扩展ContainerAware代替。

请注意

如果你看一看控制器方法,你会发现他们只是不错的快捷方式,以缓解学习曲线。

路由

如果包提供的路线,他们必须以包为前缀的别名。AcmeBlogBundle例如,所有线路都必须前缀acme_blog_

模板

如果一个包提供了模板,他们必须使用树枝。一捆不能提供主要布局,除非它提供了一个完整的应用程序。

翻译文件

如果一个包提供消息翻译,他们必须定义在XLIFF格式;域应该包命名的名称(bundle.hello)。

一捆不能覆盖现有的消息来自另一个包。

配置

提供更大的灵活性,一个包可以提供可配置的设置通过使用Symfony2内置的机制。ob娱乐下载

对于简单的配置设置,依赖于默认参数条目的Symfony2配置ob娱乐下载。ob娱乐下载Symfony2参数简单的键/值对;价值是任何有效的PHP价值。每个参数的名字应该开始包别名,虽然这只是一个最佳实践建议。其余的参数名称将使用一段时间()独立的不同部分(如。acme_hello.email.from)。

最终用户可以提供值在任何配置文件:

  • YAML
  • XML
  • PHP
  • Ini
1 2 3
# app / config / config.yml参数:acme_hello.email.from:fabien@example.com

从容器中检索代码中配置参数:

1
美元容器- >getParameter (“acme_hello.email.from”);

即使这种机制很简单,你是高度鼓励使用语义配置中所描述的食谱。

请注意

如果你定义的服务,他们也应该与包别名前缀。

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