Symfob娱乐下载ony框架最佳实践
Symfob娱乐下载ony框架最佳实践¶
本文描述了使用Symfony开发web应用程序的最佳实践ob娱乐下载这符合原始Symfony创作者所设想的哲学。ob娱乐下载
如果您不同意其中一些建议,他们可能是一个好的初始点那你就可以扩展并适合您的具体需求.您甚至可以完全忽略它们并继续使用您自己的最佳实践和方法。ob娱乐下载Symfony足够灵活,以适应您的需求。
本文假设您已经具有开发Symfony应用程序的经验。ob娱乐下载如果你不知道,先读开始文件的一部分。欧宝官网下载app
提示
ob娱乐下载Symfony提供了一个调用示例应用程序ob娱乐下载Symfony演示它遵循所有这些最佳实践,所以您可以在实践中体验它们。
创建项目¶
使用symfonob娱乐下载y二进制文件来创建Symfony应用程序¶
Symfob娱乐下载ony二进制文件是在您的机器上创建的可执行命令obb体育 .它提供了多种实用工具,包括创建新Symfony应用程序的最简单方法:ob娱乐下载
1 |
$ob娱乐下载symfony新我的项目名称
|
在幕后,这个Symfony二进制命令执行所ob娱乐下载需的操作作曲家命令创建一个新的Symfonyob娱乐下载应用程序基于当前稳定版本。
使用默认目录结构¶
除非您的项目遵循强加于特定目录结构的开发实践,否则请遵循默认的Symfony目录结构。ob娱乐下载它是扁平的,不言自明的,没有与Symfony耦合:ob娱乐下载
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 |
your_project /├─资产/├─bin/│└ - 控制台├─配置/│├─包/│└─服务.Yaml├─迁移/├─公共/│├─build /│└─igent.php├─SRC /│├─kernel.php│├──控制器/│├─datafixtures /│├─实体/│├─evacesubscriber /│├─格式/│├─存储库/│├─安全/│└──枝/├─模板/├─测试/├─翻译/├─var /│├─cache/│└─log /└─供应商/
|
配置¶
使用环境变量进行基础设施配置¶
这些选项的值在不同的机器之间会发生变化(例如,从开发机器到生产服务器),但它们不会修改应用程序的行为。
在项目中使用env变量要定义这些选项并创建多个选项.env
文件配置每个环境的env变量.
对敏感信息使用机密¶
当你的应用程序有敏感配置时——比如API密钥——你应该通过ob娱乐下载Symfony的秘密管理系统.
使用应用程序配置参数¶
这些选项用于修改应用程序行为,如电子邮件通知的发送者或启用的功能切换.它们的值不会因每台机器而改变,所以不要将它们定义为环境变量。
定义这些选项参数在配置/ services.yaml
文件。您可以重写这些选项环境在config/services\u dev.yaml
和配置/ services_prod.yaml
文件。
业务逻辑¶
不要创建任何包来组织应用程序逻辑¶
当Symfob娱乐下载ony 2.0发布时,使用了应用程序捆绑将代码划分为逻辑特性:UserBundle、ProductBundle、InvoiceBundle等。然而,捆绑包意味着可以作为一个独立的软件片段进行重用。
如果您需要在项目中重用某些功能,请为其创建一个捆绑包(在私有存储库中,以使其不公开)。对于应用程序代码的其余部分,使用PHP名称空间来组织代码,而不是捆绑包。
使用yaml格式来配置您自己的服务¶
如果你使用默认的服务。yaml的配置,大多数服务将自动配置。然而,在某些边缘情况下,您需要手动配置服务(或其中的一部分)。
yaml是建议配置服务的格式,因为它对新人和简洁方面很友好,但Symfony也支持XML和PHP配置。ob娱乐下载
使用注释来定义原则实体映射¶
教义实体是您存储在某些“数据库”中存储的普通PHP对象。Doctrine仅通过为模型类配置的映射元数据了解您的实体。
Doctrine支持几种元数据格式,但建议使用注释,因为它们是迄今为止设置和查找映射信息最方便和敏捷的方式。
控制器¶
使您的控制器扩展AbstractController
基础控制器¶
ob娱乐下载Symfony提供了一个基本控制器其中包括用于最常见需求的快捷方式,如呈现模板或检查安全权限。
从此管理控制器扩展控制器将您的应用程序耦合到Symfony。ob娱乐下载耦合通常是错误的,但在这种情况下可能还可以,因为控制器不应包含任何业务逻辑。控制器应该包含超过几行胶水代码,因此您不耦合应用程序的重要部分。
使用属性或注释来配置路由、缓存和安全性¶
使用属性或注释进行路由、缓存和安全性简化了配置。您不需要浏览使用不同格式(YAML、XML、PHP)创建的多个文件:所有配置都是您需要的,而且它只使用一种格式。
不要使用注解配置控制器模板¶
的@模板
注释很有用,但也涉及一些问题魔术.而且,大多数时候@模板
在没有任何参数的情况下使用,这使得可以更难以知道正在呈现的模板。它还隐藏了控制器应始终返回的事实回答
对象。
使用依赖注入获取服务¶
如果你扩大基数AbstractController
,您只能访问最常见的服务(例如枝条
,路由器
,学说
等),直接从容器通过$ this - >容器> get ()
或$ this - > get ()
.相反,您必须使用依赖注入来获取服务类型提示操作方法参数或构造函数参数。
如果方便,请使用参数转换器¶
如果您正在使用学说,那么你可以(可选)使用ParamConverter自动查询一个实体并将其作为参数传递给控制器。如果找不到实体,它还会显示一个404页面。
如果从路由变量获取实体的逻辑更复杂,则最好在控制器内部进行条令查询(例如,通过调用教义存储库方法).
模板¶
使用蛇盒进行模板名称和变量¶
使用小写的snake_case来表示模板名、目录和变量(例如:user_profile
而不是userProfile
和产品/ edit_form.html.twig.
而不是产品/ EditForm.html.twig
).
形式¶
在模板中添加表单按钮¶
表格类应不可知论于它们将使用它们的位置。例如,用于创建和编辑项目的表单的按钮应根据所用的位置,“添加新”改变为“保存更改”。
建议在模板中添加按钮,而不是在表单类或控制器中添加按钮。这也改进了关注点的分离,因为按钮样式(CSS类和其他属性)是在模板中定义的,而不是在PHP类中定义的。
但是,如果您创建带有多个提交按钮的表单你应该在控制器中而不是在模板中定义它们。否则,在控制器中处理表单时,将无法检查单击了哪个按钮。
国际化¶
使用xliff格式进行翻译文件¶
Symfony支持的所有翻译格式(PHP, Qt,ob娱乐下载.po.
,.mo.
, JSON, CSV, INI等),XLIFF
和GetText.
在专业翻译人员使用的工具中具有最佳支持。由于它基于XML,您可以验证XLIFF
文件内容,因为你写他们。
ob娱乐下载Symfony还支持XLIFF文件中的注释,使它们对翻译人员更加友好。最后,好的翻译都是关于上下文的,这些XLIFF注释允许您定义上下文。
使用键翻译而不是内容字符串¶
使用键简化了翻译文件的管理,因为您可以更改模板、控制器和服务中的原始内容,而不必更新所有的翻译文件。
钥匙应该总是描述它们意图和不是他们的位置。例如,如果表单具有标签“用户名”的字段,则将是一个很好的键label.username.
,不是edit_form.label.username.
.
安全¶
网络资产¶
测试¶
烟雾测试你的网址¶
在软件工程中,烟雾测试由组成初步测试揭示简单的失败,严重到足以拒绝一个预期的软件发布。.使用PHPUnit)数据提供者你可以定义一个功能测试来检查所有的应用url是否成功加载:
/ /测试/ ApplicationAvailabilityFunctionalTest.php名称空间App \测试;使用ob娱乐下载Symfony \包\ FrameworkBundle \ \ WebTestCase测试;类ApplicationAvailabilityFunctionaltest.延伸WebTestCase.{/*** @dataProvider urlProvider*/平民的函数testPageIsSuccessful($ url){$client=自己::createClient();$client->要求('得到',$ url);$这一点->assertrecesteSiseucesfess();}平民的函数URL提供者(){收益率[' / '];收益率['/ posts'];收益率[' / post / fixture-post-1 '];收益率[' /博客/类别/ fixture-category '];收益率[“/档案”];// ......}}
在创建应用程序时添加此测试,因为它只需要很少的工作,并检查没有页面返回错误。稍后,您将为每个页面添加更多特定的测试。
这项工作,包括代码样本,是根据知识共享BY-SA 3.0许可证。