最佳实践可重用的包
编辑该页面警告:你浏览的文档欧宝官网下载appob娱乐下载Symfony 2.5,不再维护。
读这个页面的更新版本Symfob娱乐下载ony 6.2(当前的稳定版本)。
最佳实践可重用的包
有两种类型的包:
- 特定于应用程序的包:只用于构建应用程序;
- 可重用的包:在许多项目之间共享。
你的这篇文章是关于如何结构可重复使用的包所以他们容易配置和扩展。这些建议并不适用于应用程序包,因为你要保持尽可能简单。对于应用程序包,跟着在本书中所示的实践和食谱。
另请参阅
讨论了特定于应用程序的包的最佳实践Symfob娱乐下载ony框架的最佳实践。
包的名字
包也是一个PHP名称空间。名称空间必须遵循的技术互操作性标准为PHP名称空间和类名:它开始于一个供应商,其次是零个或多个类别细分,以短名称的名称空间,它必须结束包
后缀。
一个名称空间变成一个包当你添加一个包类。包类名称必须遵循这些简单的规则:
- 只使用字母数字字符和下划线;
- 使用一个CamelCased名称;
- 使用描述性和短名称(不超过2字);
- 前缀的名称与连接供应商(和可选的类别名称空间);
- 后缀的名字
包
。
这里有一些有效的包命名空间和类名:
名称空间 | 包类名 |
---|---|
Acme \包\ BlogBundle |
AcmeBlogBundle |
Acme \包\社会\ BlogBundle |
AcmeSocialBlogBundle |
Acme \ BlogBundle |
AcmeBlogBundle |
按照惯例,getName ()
包类的方法应该返回的类名。
请注意
如果你公开分享你的包,你必须使用包类名称的名称存储库(AcmeBlogBundle
而不是BlogBundle
例如)。
请注意
ob娱乐下载Symfony核心包不包类前缀ob娱乐下载
而且总是添加一个包
sub-namespace;例如:FrameworkBundle。
每个包都有一个别名,它是小写字母的简短版的包名称使用下划线(acme_hello
为AcmeHelloBundle
,或acme_social_blog
为Acme \社会\ 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 \控制器
。
所有类和文件必须遵循Symfony编码ob娱乐下载标准。
一些类应被视为立面,应该尽可能短,像命令,帮手,侦听器,控制器。
类连接到事件分配器应该后缀为侦听器
。
应该存储在一个异常类异常
sub-namespace。
测试
包应该有一个测试套件用PHPUnit)和存储测试/
目录中。测试应该遵循以下原则:
- 测试套件必须与一个简单的可执行文件
phpunit)
命令从一个示例应用程序运行; - 功能测试应该只被用来测试响应输出和一些分析信息如果你有;
- 测试应该覆盖至少95%的代码库。
请注意
一个测试套件必须不包含AllTests.php
脚本,但是必须依靠的存在phpunit.xml.dist
文件。
欧宝官网下载app
所有的类和函数必须有完整的PHPDoc。
丰富的文档也应该提供欧宝官网下载app的reStructuredText下格式,资源/ doc /
目录;的资源/ doc / index.rst
文件是唯一的强制性文件,必须文档的入口点。欧宝官网下载app
安装说明
为了减轻第三方的安装包,在你考虑使用以下标准指令README.md
文件。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17日18 19 20 21日22日23日24日25日26日27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44
安装= = = = = = = = = = = =步骤1:下载包- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -打开一个命令控制台,输入您的项目目录并执行以下命令来下载最新的稳定版本的包:“‘bash作曲家美元需要<包名称>“~ 1”“这个命令需要你安装了作曲家在全球范围内,为解释(安装章)(https://getcomposer.org/doc/00-intro.md)的作曲家文档。欧宝官网下载app第二步:使包- - - - - - - - - - - - - - - - - - - - - - - - -然后,使包通过添加以下行在app / AppKernel。php的文件您的项目:“php < ?php / / app / AppKernel。php / /……类AppKernel扩展内核{公共职能registerBundles(){$包=数组(/ /……新<供应商> \ < bundle-name > \ < bundle-long-name > ());/ /……}/ /……}’‘
这个模板假定你的包的1.倍
的版本。如果不是,改变“~ 1”
安装相应版本(“~ 2”
,“~ 3”
等)。
可选地,您可以添加更多的安装步骤(步骤3,步骤4等)来解释其他必需的安装任务,如登记线路或抛售资产。
路由
如果包提供的路线,他们必须以包为前缀的别名。AcmeBlogBundle例如,所有线路都必须前缀acme_blog_
。
模板
如果一个包提供了模板,他们必须使用树枝。一捆不能提供主要布局,除非它提供了一个完整的应用程序。
配置
提供更大的灵活性,一个包可以提供可配置的设置通过使用Symfony的内置机制。ob娱乐下载
对于简单的配置设置,依赖于默认参数
Symfony的配置条目。ob娱乐下载ob娱乐下载Symfony参数简单的键/值对;价值是任何有效的PHP价值。每个参数的名字应该开始包别名,虽然这只是一个最佳实践建议。其余的参数名称将使用一段时间(。
)独立的不同部分(如。acme_hello.email.from
)。
最终用户可以提供值在任何配置文件:
1 2 3
# app / config / config.yml参数:acme_hello.email.from:fabien@example.com
1 2 3 4
< !——app / config / config。xml - - ><参数><参数关键=“acme_hello.email.from”>fabien@example.com< /参数>< /参数>
1 2
/ / app / config / config . php美元容器- >setParameter (“acme_hello.email.from”,“fabien@example.com”);
1 2 3
;应用程序/配置/ config.ini(参数)acme_hello.email.from= fabien@example.com
从容器中检索代码中配置参数:
1
美元容器- >getParameter (“acme_hello.email.from”);
即使这种机制很简单,你是高度鼓励使用语义配置中所描述的食谱。
请注意
如果你定义的服务,他们也应该与包别名前缀。
自定义验证约束
从Symfony 2.5开始ob娱乐下载,引入了一个新的验证API。事实上,有三个模式,用户可以配置他们的项目:
- 2.4:2.4和更早的原始验证API;
- 2.5:新2.5,后来验证API;
- 2.5公元前:向后兼容的新2.5 API层,2.4 API仍能工作。这是仅可在PHP 5.3.9 +。
作为一个包的作者,你想要支持这两个API,因为有些用户可能仍然使用2.4 API。具体地说,如果你的包直接违反补充道ExecutionContext(例如在一个定制的验证约束),你需要检查正在使用哪个API。下面的代码,将工作所有用户:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21日22日23日24
使用ob娱乐下载\组件\验证器\ConstraintValidator;使用ob娱乐下载\组件\验证器\约束;使用ob娱乐下载\组件\验证器\上下文\ExecutionContextInterface;/ /……类ContainsAlphanumericValidator扩展ConstraintValidator{公共函数验证(美元价值、约束美元约束){如果(美元这- >上下文运算符ExecutionContextInterface) {/ / 2.5 API美元这- >上下文- >buildViolation (美元约束- >消息)- >setParameter (“%字符串%”,美元价值)- >addViolation ();}其他的{/ / 2.4 API美元这- >上下文- >addViolation (美元约束- >消息,数组(“%字符串%”= >美元价值));}}}