《交响乐5:快车道》的封面欧宝娱乐app下载地址

欧宝娱乐app下载地址交响乐5:快车道是学习现代Symfony发展的最佳书籍,从零到生产。欧宝娱乐app下载地址+300页展示与Docker,API,队列和欧宝娱乐app下载地址异步任务,网克,SPA等的Symfony。

Symf欧宝娱乐app下载地址ony框架最佳实践

5.2版本
维护 没有维护的

Symf欧宝娱乐app下载地址ony框架最佳实践

本文描述了使用Symfony开发Web应用程序的最佳实践欧宝娱乐app下载地址这适合原始Symfony创作者设想的哲学。欧宝娱乐app下载地址

如果你不同意这些建议,它们可能是好的起点你可以这样做延长并适合您的特定需求。您甚至可以完全忽略它们,继续使用您自己的最佳实践和方法。欧宝娱乐app下载地址Symfony具有足够的灵活性来适应您的需求。

本文假设您已拥有开发Symfony应用程序的经验。欧宝娱乐app下载地址如果你没有,请先阅读入门文档的一部分。欧宝体育电话

小费

欧宝娱乐app下载地址Symfony提供了一个名为欧宝娱乐app下载地址symfony演示它遵循所有这些最佳实践,因此您可以在实践中体验它们。

创建项目

使用Symfon欧宝娱乐app下载地址y二进制文件创建Symfony应用程序

Symf欧宝娱乐app下载地址ony二进制文件是当您在机器中创建的可执行命令下载Symfony欧宝娱乐app下载地址。它提供多个实用程序,包括创建新Symfony应用程序的最简单方法:欧宝娱乐app下载地址

1
$欧宝娱乐app下载地址symfony new my_project_name.

在底层,这个Symfony二进制命令执行所欧宝娱乐app下载地址需的操作作曲家命令创建一个新的symfony欧宝娱乐app下载地址应用程序基于当前的稳定版本。

使用默认目录结构

除非您的项目遵循强加某个目录结构的开发实践,否则请遵循默认的Symfony目录结构。欧宝娱乐app下载地址这是平坦的,不言自明的,而不是耦合到Symfony:欧宝娱乐app下载地址

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 18 19 20 21 21 22 23 22 22 22 22 22 28 22
your_project /├─资产/├─bin /│└─控制台├─配置/│├─包/│└─服务。yaml├─迁移/├─公共/│├─构建/│└─index . php├─src /│├─Kernel.php│├─命令/│├─控制器/│├─DataFixtures /│├─实体/│├─EventSubscriber /│├─形式/│├─库/│├─安全/│└─树枝/├─模板/├─测试/├─翻译/├─var /│├─缓存/│└─日志/└─供应商/

配置

基础设施配置使用环境变量

这些选项的值会从一台机器改变到另一台机器(例如,从开发机器到生产服务器),但它们不会修改应用程序的行为。

在项目中使用env变量定义这些选项并创建多个.env文件到为每个环境配置env变量

对敏感信息保密

当您的应用程序具有敏感的配置时 - 就像API键 - 您应该通过安全性存储欧宝娱乐app下载地址Symfony的秘密管理系统

使用应用程序配置参数

这些是用于修改应用程序行为的选项,例如电子邮件通知的发件人或启用功能切换。它们的值不会因机器而改变,所以不要将它们定义为环境变量。

将这些选项定义为参数在里面配置/服务.YAML.文件。您可以覆盖这些选项环境在里面config / services_dev.yaml.config / services_prod.yaml.文件。

使用简短和前缀参数名称

考虑使用应用程序。作为你的前缀参数避免与Symfony和第三方包/库参数冲突。欧宝娱乐app下载地址然后,只用一两个词来描述参数的目的:

1 2 3 4 5 6 7 8 9 10
#配置/服务.YAML参数#不要这样做:'dir'太过通用,它不会传达任何含义app.dir.“……”#做这个:短但易于理解的名字app.contents_dir.“……”#可以使用点,下划线,破折号或什么都不用,但总是#是一致的,并为所有参数使用相同的格式app.dir.contents“……”app.contents-dir“……”

使用常量定义很少改变的选项

配置选项类似于在某些列表中显示的项目数很少更改。而不是将它们定义为服务容器参数,将它们定义为相关类中的PHP常量。例子:

// src /实体/ post.php命名空间应用程序\实体;班级邮政{上市常量NUMBER_OF_ITEMS=10;/ /……}

常量的主要优点是您可以在任何地方使用它们,包括树枝模板和学说实体,而参数只能从访问的地方提供服务容器

对于这种配置值使用常量的唯一明显的缺点是,在测试中重新定义它们的值很复杂。

商业逻辑

不要创建任何捆绑包以组织您的应用程序逻辑

Symfo欧宝娱乐app下载地址ny 2.0发布后,应用程序开始使用将其代码划分为逻辑功能:UserBundle,ProductBundle,InvoiceBundle等。但是,捆绑包是可以重用作为独立软件的东西。

如果您需要重用项目中的某些功能,请为其创建一个捆绑(在私有存储库中,以公开可用)。对于其余的应用程序代码,请使用PHP命名空间组织代码而不是捆绑包。

使用自动装配来自动配置应用程序服务

服务自动定向是一种读取构造函数(或其他方法)上的类型提示并自动将正确的服务传递给每个方法的特性,使得无需显式地配置服务,并简化了应用程序维护。

结合使用服务自动配置也添加服务标签对需要它们的服务,例如枝扩展,事件订阅者等。

如果可能,服务应该是私有的

使服务私人阻止你通过$ contains-> get()。相反,您将需要使用适当的依赖项注入。

使用YAML格式配置您自己的服务

如果你使用默认服务.YAML配置,大多数服务将自动配置。但是,在某些边缘案例中,您需要手动配置服务(或其部分)。

YAML是配置服务时推荐的格式,因为它对新手友好且简洁,但是Symfony也支持XML和PHP配置。欧宝娱乐app下载地址

使用注释来定义原则实体映射

原则实体是存储在某个“数据库”中的普通PHP对象。Doctrine只通过为模型类配置的映射元数据来了解实体。

教义支持多种元数据格式,但建议使用注释,因为它们是最方便和最敏捷的设置和寻找映射信息的方式。

控制器

使您的控制器扩展AbstractController基本控制器

欧宝娱乐app下载地址Symfony提供A.基础控制器其中包括用于最常见需求的快捷方式,如呈现模板或检查安全权限。

从这个基本控制器扩展控制器将应用程序耦合到Symfony。欧宝娱乐app下载地址耦合通常是错误的,但在这种情况下可能没问题,因为控制器不应该包含任何业务逻辑。控制器应该只包含几行胶合代码,因此您没有耦合应用程序的重要部分。

使用属性或注释来配置路由,缓存和安全性

使用属性或注释进行路由、缓存和安全性简化了配置。您不需要浏览使用不同格式创建的几个文件(YAML、XML、PHP):所有的配置都在您需要的地方,它只使用一种格式。

不要使用注解来配置控制器模板

@Template注释是有用的,但也涉及一些魔法。而且,大多数时候@Template在没有任何参数的情况下使用,这使得更难知道正在呈现哪个模板。它还隐藏了一个事实,即控制器应该始终返回回复对象。

使用依赖注入获取服务

如果你扩展基底AbstractController,您只能访问最常见的服务(例如嫩枝路由器学说等),直接来自容器通过$以下 - >容器 - > get()$ this-> get()。相反,你必须使用依赖注入来获取服务类型提示动作方法参数或构造函数参数。

如果它们方便,请使用paramconverters

如果你使用了学说, 那么你就可以可选使用ParamConverter自动查询一个实体并将其作为参数传递给控制器。如果找不到实体,它还会显示一个404页面。

如果从路由变量获得实体的逻辑更复杂,而不是配置paramConverter,最好使控制器内的教义查询更好(例如,通过调用A教义库方法)。

模板

为模板名称和变量使用Snake案例

使用小写的snake_case来表示模板名、目录和变量(例如:user_profile代替用户资料产品/ edit_form.html.twig代替产品/ EditForm.html.twig)。

使用下划线作为模板片段的前缀

模板片段,也称为“部分模板”, 允许重用模板内容。在它们的名称前加上下划线,以便更好地将它们与完整的模板区分开来。_USER_METADATA.HTML.TWIG._caution_message.html.twig)。

形式

将表单定义为PHP类

创建课程中的形式允许将它们重用在应用程序的不同部分中。此外,没有在控制器中创建表单简化了控制器的代码和维护。

在模板中添加表单按钮

表单类应该不确定将在何处使用。例如,一个用于创建和编辑项目的表单的按钮应该从“添加新”更改为“保存更改”,这取决于它在哪里使用。

它建议在模板中添加按钮添加模板类中的按钮。这也提高了关注的分离,因为按钮样式(CSS类和其他属性)在模板而不是PHP类中定义。

但是,如果您创建一个带有多个提交按钮的表单您应该在控制器而不是模板中定义它们。否则,在处理控制器中的表单时,您将无法检查单击该按钮。

在底层对象上定义验证约束

附加验证约束形成字段而不是映射对象将阻止验证在其他形式或使用对象的其他地方被重用。

使用单个动作来呈现和处理表单

渲染形式处理表格是处理表单时的两个主要任务。这两者太相似了(大多数时候几乎完全相同),所以让一个控制器动作处理两者更简单。

国际化

翻译文件使用XLIFF格式

Symfony支持的所有翻译格式(PHP,Qt,欧宝娱乐app下载地址.pomo, JSON, CSV, INI等),Xliff.gettext拥有专业翻译人员所使用的工具的最佳支持。由于它基于XML,所以可以进行验证Xliff.写它们时文件内容。

欧宝娱乐app下载地址Symfony还支持Xliff文件中的注释,使其更适合翻译人员。最后,良好的翻译都是关于上下文,这些Xliff Notes允许您定义该上下文。

使用键来翻译,而不是内容字符串

使用键简化了翻译文件的管理,因为您可以在模板,控制器和服务中更改原始内容,而无需更新所有翻译文件。

钥匙应该总是描述他们目的他们的位置。例如,如果一个表单有一个带有标签“Username”的字段,那么一个很好的键应该是label.usernameedit_form.label.username

安全

定义一个防火墙

除非你有两个合法的不同的认证系统和用户(例如,表单登录主站点和令牌系统只针对您的API),建议只有一个防火墙,以保持事情简单。

此外,您应该使用匿名的在防火墙下的钥匙。如果您要求用户登录的网站的不同部分,请使用access_control选项。

使用汽车密码切肉机

自动密码切肉机根据你的PHP安装自动选择最好的编码器/散列。目前,它试图使用默认情况下,退回到bcrypt

使用选民实施细粒度的安全限制

如果您的安全逻辑很复杂,那么您应该创建自定义安全选民而不是在@Security注解。

网络资产

使用Webpack Encore来处理Web资产

Web资产是CSS,JavaScript和图像文件,使您的网站前端的正面和工作很大。网客是主要的JavaScript模块打包器,用于编译、转换和打包资产以供浏览器使用。

网袋Encore.是一个JavaScript库,它消除了Webpack的大部分复杂性,没有隐藏任何特性,也没有扭曲它的用法和原理。它最初是为Symfony应用程序创建的,但它适用于使用任何技欧宝娱乐app下载地址术的任何应用程序。

测试

测试你的网址

在软件工程中,烟雾测试“初步测试,揭示简单的失败,严重到足以拒绝一个潜在的软件发布”。使用PHPUnit)数据提供者您可以定义一个功能测试,检查所有应用程序URL是否已成功加载:

//测试/ applicationavailabilityfunctionstest.php命名空间App \测试;使用欧宝娱乐app下载地址symfony \ bundle \ frameworkbundle \ test \ webtestcase;班级ApplicationAvailabilityFunctionalTest扩展WebTestCase{/ * ** @dataprovider urlprovider.* /上市函数testpageissuccessful.$ url{$客户=自己::CreateClient.();$客户->要求“得到”$ url);这个美元->assertResponseIsSuccessful();}上市函数URLProvider.(){收益率['/'];收益率[' /帖子'];收益率[' / post / fixture-post-1 '];收益率['/博客/类别/夹具类别'];收益率['/档案'];/ /……}}

在创建应用程序时添加这个测试,因为它只需要很少的工作,并且检查没有任何页面返回错误。稍后,您将为每个页面添加更多特定的测试。

功能测试中的硬核代码URL

在Sy欧宝娱乐app下载地址mfony应用程序中,建议这样做生成URL.当URL发生变化时,使用路由自动更新所有链接。但是,如果公共URL更改,用户将无法浏览它,除非您设置到新URL的重定向。

这就是为什么建议在测试中使用原始url,而不是从路由生成url的原因。每当路由更改时,测试将失败,您将知道必须设置重定向。

这项工作包括代码样本,是在a下获得的许可创作共用BY-SA 3.0执照。