最佳实践可重用的包

编辑该页面

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

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

最佳实践可重用的包

有两种类型的包:

  • 特定于应用程序的包:只用于构建应用程序;
  • 可重用的包:在许多项目之间共享。

你的这篇文章是关于如何结构可重复使用的包所以他们容易配置和扩展。这些建议并不适用于应用程序包,因为你要保持尽可能简单。对于应用程序包,跟着整个显示的实践指南。

另请参阅

讨论了特定于应用程序的包的最佳实践Symfob娱乐下载ony框架的最佳实践

包的名字

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

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

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

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

名称空间 包类名
Acme \包\ BlogBundle AcmeBlogBundle
Acme \ BlogBundle AcmeBlogBundle

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

请注意

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

请注意

ob娱乐下载Symfony核心包不包类前缀ob娱乐下载而且总是添加一个sub-namespace;例如:FrameworkBundle

每个包都有一个别名,它是小写字母的简短版的包名称使用下划线(acme_blogAcmeBlogBundle)。这个别名用于执行独特性在一个项目中,定义包的配置选项(见下面的一些用法示例)。

目录结构

一个AcmeBlogBundle必须阅读的基本目录结构如下:

1 2 3 4 5 6 7 8 9 10 11 12 13

                 
                  /├─AcmeBlogBundle。php├─控制器/├─README。md├─许可证├─资源/│├─配置/│├─doc /││└─指数。rst│├─翻译/│├─视图/│└─公共/└─测试/

以下文件是强制性的,因为他们保证一个自动化工具可以依靠的结构公约:

  • AcmeBlogBundle.php:这是将一个普通目录转换为一个Symfony的类包(改变这个包的名称);ob娱乐下载
  • README.md:此文件包含包的基本描述,它通常显示一些基本例子和它的全部文档的链接(它可以使用任何标记的格式在GitHub的支持下,等欧宝官网下载appREADME.rst);
  • 许可证:使用的许可证代码的完整内容。大多数第三方包在MIT许可下发布的,但是你可以选择任何许可;
  • 资源/ doc / index.rst:包的根文件文档。欧宝官网下载app

子目录的深度应该保持最小的最常用类和文件(两级最大)。

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

以下类和文件有特定的阵地(有些是强制性的和其他人只是约定其次是大多数开发人员):

类型 目录 强制性的吗?
命令 命令/ 是的
控制器 控制器/ 没有
服务容器扩展 DependencyInjection / 是的
事件监听器 EventListener / 没有
模型类[1] 模型/ 没有
配置 资源/ config / 没有
Web资源(CSS、JS、图片) 资源/公共/ 是的
翻译文件 资源/翻译/ 是的
模板 资源/视图/ 是的
单元测试和功能测试 测试/ 没有

[1]看到如何提供几个原则实现的模型类如何处理与编译器通过映射。

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

所有类和文件必须遵守ob娱乐下载Symfony的编码标准

一些类应被视为立面,应该尽可能短,如命令、助手、听众和控制器。

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

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

供应商

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

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

测试

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

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

请注意

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

欧宝官网下载app

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

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

安装说明

为了减轻第三方的安装包,在你考虑使用以下标准指令README.md文件。

  • 减价
  • RST
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”您的项目的文件:' ' ' < ? phpphp / / app / AppKernel。php / /……类AppKernel扩展内核{公共职能registerBundles(){$包=数组(/ /……新<供应商> \ < bundle-name > \ < bundle-long-name > ());/ /……}/ /……}’‘

上面的示例假设您正在安装最新的稳定版本的包,你不需要提供(如包版本号。作曲家需要friendsofsymfony / usob娱乐下载er-bundle)。如果安装说明请参考一些过去的bundle版本或不稳定的版本,包括版本约束(如。作曲家需要friendsofsymfony / usob娱乐下载er-bundle“~ 2.0 @dev”)。

可选地,您可以添加更多的安装步骤(步骤3,步骤4等)来解释其他必需的安装任务,如登记线路或抛售资产。

路由

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

模板

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

翻译文件

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

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

配置

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

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

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

  • YAML
  • XML
  • PHP
1 2 3
# app / config / config.yml参数:acme_blog.author.email:“fabien@example.com”

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

1
美元容器- >getParameter (“acme_blog.author.email”);

即使这种机制很简单,你应该考虑使用更高级的语义包配置

版本控制

包必须后版本语义版本控制标准

服务

如果包定义了服务,他们必须以包为前缀的别名。例如,AcmeBlogBundle服务必须前缀acme_blog

此外,服务不是直接使用的应用程序,应该定义为私有

另请参阅

你可以了解更多关于服务加载包读这篇文章:如何加载服务配置在一个包吗

作曲家的元数据

composer.json元数据文件至少应包括下列:

的名字
由供应商和短包的名字。如果你是释放自己包,而不是代表一个公司,(如使用你的个人名字。/那blog-bundle)。包短名称不包括供应商名称和区分每个单词字符。例如:AcmeBlogBundle转换成blog-bundleAcmeSocialConnectBundle转换成social-connect-bundle
描述
包的目的的简要说明。
类型
使用ob娱乐下载symfony-bundle价值。
许可证
麻省理工学院Symfony的首选协议包,但是您可以使用任何其他许可。ob娱乐下载
自动装载
这些信息使用Symfony加载的类的包。ob娱乐下载的PSR-4自动装载标准是现代包推荐,但是PSR-0还支持标准。

为了使开发人员更容易找到你的包,注册它Packagist,作曲家的官方库包。

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