仅适用数字,字母和下划线
使用驼峰式命名
使用描述性简洁的名字(不超过两个单词)
使用供应商名称做前缀(可选的分类命名空间)
添加Bundle作为名称后缀
比如:
Namespace => Bundle 类名称
Acme\Bundle\BlogBundle => AcmeBlogBundle Acme\Bundle\Social\BlogBundle =>AcmeSocialBlogBundle Acme\BlogBundle => AcmeBlogBundle
定义bundle类时的getName()方法应该返回类名称。
每个bundle都有一个别名,它是小写字符简写版的bundle名,使用下划线分割。比如 acme_hello 的bundle原名是AcmeHelloBundle, acme_social_blog 则是Acme\Social\BlogBundle的实例。
别名在一个bundle中必须是唯一的。
Bundle的目录结构:HelloBundle的基础目录结构
XXX/... HelloBundle/ HelloBundle.php Controller/ Resources/ meta/ LICENSE config/ doc/ index.rst translations/ views/ public/ Tests/
上面的XXX/... 映射到该bundle的命名空间。其中下面的文件是必备的:
HelloBundle.php;
Resources/meta/LICENSE: 全文的许可代码;
Resources/doc/index.rst: bundle说明的根目录文件。
使用类的子文件夹的深度应该保持到最小(2级是极限)。如果更多级可以定义为非静态,不过很少使用。bundle的目录是只读的。如果你需要修改临时文件,把它们保存到主应用程序的cache/ 或者 log/ 目录下。
需要强调的类和文件
类型 VS 目录
Commands VS Command/
Controllers VS Controller/
Service Container Extensions VS /DependencyInjection/
Event Listeners VS EventListener/
Configuration VS Resources/config
Web Resources VS Resources/public
Translation files VS Resources/translations/
Templates VS Resources/views
Unit and Functional Test VS Tests/
类:
bundle的目录结构是被用来当作命名空间层级的。比如HelloController类保存在 Bundle/HelloBundle/Controller/HelloController.php文件中。
所以类的完全限定名是 Bundle\HelloBundle\Controller\HelloController 。 一些类被看作是装饰,应该越短越好,比如Commands,Helpers, Listeners 和Controllers等,一般都会被当作后缀。
跟事件分发器有关的类应该用后缀Listener标识。
异常类应该保存到一个Exception子命名空间中。
关于提供商
一个bundle不应该被嵌入第三方的PHP类库,它应该依靠Symfony2标准来自动加载它们。
一个bundle不应该被嵌入第三方的javascript,CSS或者其它语言写的任何类库。
关于测试
一个bundle应该有一个使用PHPUnit的测试单元并把它存储在Tests/ 目录下。
测试应该遵循以下原则:
测试套件必须能够被一个简单的phpunit 命令从一个简单的应用程序中执行。
功能测试应该只备用来测试回复输出和一些监控信息。
测试代码覆盖应该至少在95%以上的基本代码。
一个测试套件可以不包含AllTests.php脚本,但必须依靠外部的phpunit.xml.dist文件。
文档说明
所有的类必须带有PHPDoc。
Controllers