Symfob娱乐下载ony框架最佳实践

5.2版本
保持 不明意

Symfob娱乐下载ony框架最佳实践

本文介绍了使用Symfony开发Web应用程序的最佳实践ob娱乐下载这适合原始Symfony创作者设想的哲学。ob娱乐下载

如果您不同意其中一些建议,他们可能是一个好的初始点那你可以延长并适合您的特定需求。您甚至可以完全忽略它们并继续使用您自己的最佳实践和方法。ob娱乐下载Symfony足够灵活,以适应您的需求。

本文假设您已拥有开发Symfony应用程序的经验。ob娱乐下载如果你没有,请先阅读入门文件的一部分。欧宝官网下载app

小费

ob娱乐下载Symfony提供了一个调用示例应用程序ob娱乐下载symfony演示这遵循所有这些最佳实践,所以你可以在实践中体验它们。

创建项目

使用symfonob娱乐下载y二进制文件来创建Symfony应用程序

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

1
$ob娱乐下载symfony new my_project_name.

在引擎盖下,此Symfony Binaryob娱乐下载命令执行所需的作曲家命令创建一个新的symfonyob娱乐下载应用程序基于当前的稳定版本。

使用默认目录结构

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

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├─迁移/├─公共/│├─build /│└─igent.php├─SRC /│├─kernel.php│├──控制器/│├─datafixtures /│├─实体/│├─evacesubscriber /│├─格式/│├─存储库/│├─安全/│└──枝/├─模板/├─测试/├─翻译/├─var /│├─cache/│└─log /└─供应商/

配置

使用环境变量进行基础架构配置

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

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

对敏感信息使用秘密

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

使用应用程序配置参数

这些是用于修改应用程序行为的选项,例如电子邮件通知的发件人或已启用功能切换。它们的值不会每台计算机更改,因此请勿将其定义为环境变量。

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

使用简短和前缀参数名称

考虑使用应用程序。作为你的前缀参数避免与symfony和第三方捆绑/库参数碰撞。ob娱乐下载然后,只使用一个或两个单词来描述参数的目的:

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命名空间应用程序\实体;班级邮政{上市const项目数=10.;// ......}

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

使用这种配置值的常量的唯一值得注意的缺点是重新定义测试中的值是复杂的。

商业逻辑

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

当Symfob娱乐下载ony 2.0发布时,使用的应用程序捆绑将其代码划分为逻辑功能:UserBundle,ProductBundle,InvoiceBundle等。但是,捆绑包是可以重用作为独立软件的东西。

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

使用Autowiring自动执行应用程序服务的配置

服务自动定向是一个要在构造函数(或其他方法)上的类型提示的功能,并自动将正确的服务传递给每个方法,这使得不必明确配置服务并简化应用程序维护。

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

服务应该是私人的

使服务私密防止您通过访问这些服务$ contains-> get()。相反,您需要使用适当的依赖注入。

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

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

yaml是建议配置服务的格式,因为它对新人和简洁方面很友好,但Symfony也支持XML和PHP配置。ob娱乐下载

使用注释来定义学说实体映射

教义实体是您存储在某些“数据库”中存储的普通PHP对象。Doctrine仅通过为模型类配置的映射元数据了解您的实体。

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

控制器

使您的控制器扩展AbstractController.基础控制器

ob娱乐下载Symfony提供A.基础控制器其中包括最常见的需要的快捷方式,例如呈现模板或检查安全权限。

从此管理控制器扩展控制器将您的应用程序耦合到Symfony。ob娱乐下载耦合通常是错误的,但在这种情况下可能还可以,因为控制器不应包含任何业务逻辑。控制器应该包含超过几行胶合代码,因此您不耦合应用程序的重要部分。

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

使用属性或注释进行路由,缓存和安全性简化了配置。您无需浏览具有不同格式创建的多个文件(yaml,XML,PHP):所有配置只是您需要它的位置,它只使用一种格式。

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

@模板注释是有用的,但也涉及一些魔法。而且,大部分时间@模板在没有任何参数的情况下使用,这使得可以更难以知道正在呈现的模板。它还隐藏了控制器应始终返回的事实回复目的。

使用依赖注入来获取服务

如果延长基础AbstractController.,您只能访问最常见的服务(例如枝条路由器教义等),直接来自容器通过$以下 - >容器 - > get()或者$ this-> get()。相反,您必须使用依赖注入来获取服务类型提示操作方法参数或构造函数参数。

如果它们方便,请使用paramconverters

如果你使用了教义, 那么你就可以可选使用paramconverter.自动查询实体并将其传递为控制器的参数。如果没有找到实体,它还将显示一个404页面。

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

模板

使用蛇盒进行模板名称和变量

使用Depoised Snake_Case进行模板名称,目录和变量(例如用户资料代替用户资料产品/ edit_form.html.twig.代替Product / EditForm.html.twig.)。

前缀模板片段与下划线

模板碎片,也称为“部分模板”, 允许重用模板内容。用下划线前缀他们的名称以更好地将它们与完整模板区分开(例如_USER_METADATA.HTML.TWIG.或者_caution_message.html.twig.)。

形式

将您的表单定义为PHP类

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

在模板中添加表单按钮

表格类应不可知论于它们将使用它们的位置。例如,用于创建和编辑项目的表单的按钮应根据所用的位置,“添加新”改变为“保存更改”。

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

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

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

附加验证约束要形成字段而不是映射对象可防止验证在其他表单中重用或使用对象的其他位置。

使用单个动作呈现并处理表单

渲染形式处理表格处理表格时是两个主要任务。两者都太相似(大多数时间,几乎相同),因此可以让单个控制器动作句柄更简单。

国际化

使用xliff格式进行翻译文件

Symfony支持的所有翻译格式(PHP,Qt,ob娱乐下载.po..mo.,json,csv,Ini等),Xliff.GetText.在专业翻译人员使用的工具中具有最佳支持。由于它基于XML,您可以验证Xliff.写它们时文件内容。

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

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

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

钥匙应该始终描述他们的目的不是他们的位置。例如,如果表单具有标签“用户名”的字段,则将是一个很好的键label.username.不是edit_form.label.username.

安全

定义一个防火墙

除非您有两个合法的不同身份验证系统和用户(例如,仅为您的API的主站点和令牌系统进行登录),否则它建议只有一个防火墙来保持简单。

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

使用汽车密码哈尔

自动密码哈尔根据您的PHP安装自动选择最佳的编码器/ Hasher。目前,它试图使用默认情况下并倒回Bcrypt.

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

如果您的安全逻辑很复杂,则应创建自定义安全选民而不是在里面定义长长的表达@安全注解。

网络资产

使用WebPack Encore来处理Web资产

Web资产是CSS,JavaScript和图像文件,使您的网站前端的正面和工作很大。网客是领先的JavaScript模块Bundler,可在浏览器中编译,转换和包装资产。

网袋Encore.是一个JavaScript库,可以摆脱大多数网站复杂性,而不隐藏其任何功能或扭曲其使用和哲学。它最初是为Symfony应用程序创建的,但它适用于使用任何技ob娱乐下载术的任何应用程序。

测试

烟雾测试你的网址

在软件工程中,烟雾测试由组成“初步测试揭示了严重的简单失败,以拒绝预期软件释放”。使用PHPUNIT数据提供者您可以定义一个功能测试,检查所有应用程序URL是否已成功加载:

//测试/ applicationavailabilityfunctionstest.php命名空间app \ test.;ob娱乐下载symfony \ bundle \ frameworkbundle \ test \ webtestcase;班级ApplicationAvailabilityFunctionaltest.延伸WebTestCase.{/ *** @dataprovider urlprovider.* /上市功能testpageissuccessful.$ url{$客户=自己::CreateClient.();$客户- >要求'得到'$ url);$这一点- >assertrecesteSiseucesfess();}上市功能URLProvider.(){屈服['/'];屈服['/ posts'];屈服['/ post / fixture-post-1'];屈服['/博客/类别/夹具类别'];屈服['/档案'];// ......}}

创建应用程序时添加此测试,因为它需要很少的努力并检查您的任何页面是否返回错误。稍后,您将为每个页面添加更具体的测试。

功能测试中的硬核代码URL

在Syob娱乐下载mfony应用程序中,它建议使用生成URL.使用路由在URL更改时自动更新所有链接。但是,如果公共URL更改,除非您为新URL设置重定向,否则用户将无法浏览它。

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

这项工作包括代码样本,是在a下获得的许可Creative Commons by-SA 3.0执照。