最佳实践可重用的包

编辑该页面

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

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

最佳实践可重用的包

你的这篇文章是关于如何结构可重复使用的包所以他们容易配置和扩展。可重用的包是为了共享私下在许多公司项目或公开任何Symfony项目可以安装。ob娱乐下载

包的名字

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

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

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

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

名称空间 包类名
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├─ Controller/ ├─ README.md ├─ LICENSE ├─ Resources/ │ ├─ config/ │ ├─ doc/ │ │ └─ index.rst │ ├─ translations/ │ ├─ views/ │ └─ public/ └─ Tests/< /your-bundle>

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

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

子目录的深度应保持在最低限度的最常用类和文件。两个层次是最大的。

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

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

类型 目录
命令 命令/
控制器 控制器/
服务容器扩展 DependencyInjection /
教义ORM实体(当不使用注释) 实体/
教义ODM文件(当不使用注释) 文档/
事件监听器 EventListener /
配置(路线、服务等) 资源/ config /
网络资产(CSS、JS、图片) 资源/公共/
翻译文件 资源/翻译/
验证(当不使用注释) 资源/ config /验证/
序列化(当不使用注释) 资源/ config /序列化/
模板 资源/视图/
单元测试和功能测试 测试/

包目录结构作为名称空间的层次结构。例如,一个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文件。

持续集成

不断测试包的代码,包括所有的提交和拉请求,是一个很好的实践称为持续集成。有几个服务为开源项目提供免费这一功能。Symfony的最受欢迎的服务包ob娱乐下载特拉维斯CI

这是推荐的配置文件(.travis.ymlSymfonob娱乐下载y包),测试这两个最新的LTS版Symob娱乐下载fony的最新beta发布版:

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 45 46 47 48 49 50 51 52 53 54 55 56 57 58
语言:phpsudo:缓存:目录:- - - - - -$ HOME / .composer /缓存/文件- - - - - -$ HOMEob娱乐下载 / symfony-bridge / .phpunitenv:全球:- - - - - -PHPUNIT_FLAGS = " v "- - - - - -ob娱乐下载SYMFONY_PHPUNIT_DIR = " $ HOME / symfony-bridge / .phpunit”矩阵:fast_finish:真正的包括:#最小支持最新的和最古老的PHP版本的依赖关系- - - - - -php:7.2env:COMPOSER_FLAGS = "——prefer-stable——prefer-lowest”ob娱乐下载SYMFONY_DEPRECATIONS_HELPER = " weak_vendors "- - - - - -php:7.0env:COMPOSER_FLAGS = "——prefer-stable——prefer-lowest”ob娱乐下载SYMFONY_DEPRECATIONS_HELPER = " weak_vendors "#测试最新的稳定版本- - - - - -php:7.0- - - - - -php:7.1- - - - - -php:7.2env:覆盖率= truePHPUNIT_FLAGS = " - v——coverage-text”#测试LTS版。这确保我们不使用Symfony的包的版本ob娱乐下载分别比2或3 #。阅读更多:https://github.com/symfony/ob娱乐下载lts- - - - - -php:7.2env:依赖项= " symfonyob娱乐下载 / lts: ^ 2”- - - - - -php:7.2env:依赖项= " symfonyob娱乐下载 / lts: ^ 3”#最新提交的主人- - - - - -php:7.2env:稳定=“开发”allow_failures:# Dev-master允许失败。- - - - - -env:稳定=“开发”before_install:- - - - - -如果[[美元的报道! =真正的]];然后phpenvconfig-rmxdebug.ini| |真正的;fi- - - - - -如果!(- z“美元稳定”];然后作曲家配置minimum-stability${稳定};fi;- - - - - -如果!(- v“依赖美元”];然后作曲家需要——没有进行过更新${}的依赖关系;fi;安装:#删除时,这个问题将得到解决:https://github.com/composer/composer/issues/5355- - - - - -如果[[“COMPOSER_FLAGS美元”= =*”——prefer-lowest”*]];然后作曲家更新——prefer-dist——没有交互——prefer-stable——安静;fi- - - - - -作曲家更新$ {COMPOSER_FLAGS}——prefer-dist——没有交互- - - - - -/供应商/ bin / simple-phpunit安装脚本:- - - - - -作曲家验证——严格——no-check-lockPHPUnit)提供的# simple-phpunit PHPUnit)包装器组件和桥梁#它有助于测试遗留代码和用法(作曲家需要symfony / phpunit-bridge)ob娱乐下载- - - - - -/供应商/ bin / simple-phpunitPHPUNIT_FLAGS美元

考虑使用特拉维斯cron工具,以确保您的项目是建立即使没有新的拉请求或提交。

安装

包应该设定“类型”:“symob娱乐下载fony-bundle”在他们的composer.json文件。用这个,ob娱乐下载Symfony Flex能够自动启用您的安装包的时候。

如果你的包需要任何设置(例如配置,新文件,更改.gitignore等),那么您应该创建一个ob娱乐下载Symfony Flex食谱

欧宝官网下载app

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

丰富的文档也应该提供欧宝官网下载app的资源/ doc /目录中。索引文件(例如资源/ doc / index.rst资源/ doc / index.md)是唯一强制性的文件,必须文档的入口点。欧宝官网下载app的reStructuredText (rST)是用于呈现在www.pdashmedia.com上的文档格式。欧宝官网下载appob娱乐下载

安装说明

为了减轻第三方的安装包,在你考虑使用以下标准指令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 45 46 47 48 49 50 51 52 53
安装= = = = = = = = = = = =使用Symfony的Flex应用程序- - ob娱乐下载- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -打开一个命令控制台,输入你的项目目录并执行:““控制台作曲家美元需要<包名称>”“应用程序不使用Symfony Flex - - - - ob娱乐下载- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -# # #第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
#配置/ services.yaml参数:acme_blog.author.email:“fabien@example.com”

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

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

这种机制要求最少的努力时,你应该考虑使用更高级的语义包配置使您的配置更健壮。

版本控制

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

服务

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

此外,服务不是直接使用的应用程序,应该定义为私有。为公共服务,应该创建别名从接口/类服务id。例如,在MonologBundle,创建一个别名Psr \ \ LoggerInterface日志日志记录器这样LoggerInterfacetype-hint可用于自动装配。

不应该使用自动装配或自动配置的服务。相反,所有的服务都应该明确定义。

另请参阅

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

作曲家的元数据

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

的名字
由供应商和短包的名字。如果你是释放自己包,而不是代表一个公司,(如使用你的个人名字。/那blog-bundle)。排除卖方的名字从包短名称和单独的每个单词字符。例如:AcmeBlogBundle转化为blog-bundle和AcmeSocialConnectBundle转化为social-connect-bundle
描述
包的目的的简要说明。
类型
使用ob娱乐下载symfony-bundle价值。
许可证
一个字符串(字符串或数组)有效的许可证标识符,如麻省理工学院
自动装载
这些信息使用Symfony加载的类的包。ob娱乐下载推荐使用PSR-4自动装载标准。

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

资源

如果包引用任何资源(配置文件,翻译文件等),不使用(如物理路径。__DIR__ /配置/ services . xml(如),但逻辑路径。@FooBundle /资源/配置/ services . xml)。

的逻辑路径是必需的,因为包覆盖机制,允许您覆盖的任何资源/文件包。看到HttpKernel组件更多细节将物理路径转换为逻辑路径。

注意,模板使用一个简化的版本上面所示的逻辑路径。例如,一个index.html.twig模板位于资源/视图/违约/FooBundle目录,作为引用@Foo /违约/ index.html.twig

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