Symfob娱乐下载ony框架的最佳实践
编辑该页面警告:你浏览的文档欧宝官网下载appob娱乐下载Symfony 5.3,不再维护。
读这个页面的更新版本Symfob娱乐下载ony 6.2(当前的稳定版本)。
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新my_project_directory
下罩,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├─迁移/├─公共/│├─构建/│└─指数。php├─src /│├─内核。命令/ php│├─│├─控制器/│├─DataFixtures /│├─实体/│├─EventSubscriber /│├─形式/│├─库/│├─安全/│└─树枝/├─模板/├─测试/├─翻译/├─var /│├─缓存/│└─日志/└─供应商/
配置
使用基础设施配置环境变量
这些选项的值变化从一台机器到另一个(例如,从开发机器到生产服务器)但他们不修改应用程序的行为。
在您的项目使用env var这些选项来定义和创建多个.env
文件配置env var /环境。
对敏感信息使用的秘密
当你的应用程序有敏感的配置——就像一个API密匙——你应该存储那些安全地通过ob娱乐下载Symfony的秘密管理系统。
为应用程序配置使用参数
这些选项用于修改应用程序的行为,例如邮件通知的发送者,或启用功能切换。每台机器的价值并没有改变,所以不要将他们定义为环境变量。
这些选项定义为参数在配置/ services.yaml
文件。你可以覆盖这些选项/环境在配置/ services_dev.yaml
和配置/ services_prod.yaml
文件。
使用短和前缀的参数名称
考虑使用应用程序。
的前缀参数为了避免碰撞与Symfony和第三方包/库参数。ob娱乐下载然后,使用只有一个或两个词来描述参数的目的:
1 2 3 4 5 6 7 8 9 10
#配置/ services.yaml参数:#不这样做:“dir”是通用的,它不表达任何意思app.dir:“……”#这样做:短暂而容易理解的名字app.contents_dir:“……”#这是可以使用点,突显出,破折号或什么,但总是#是一致的所有参数和使用相同的格式app.dir.contents:“……”app.contents-dir:“……”
使用常量定义选项很少改变
配置选项等物品的数量显示在一些清单很少变化。而不是将他们定义为配置参数,定义PHP常数相关的类。例子:
1 2 3 4 5 6 7 8 9
/ / src /实体/ Post.php名称空间应用程序\实体;类帖子{公共常量NUMBER_OF_ITEMS =10;/ /……}
常数的主要优势是,您可以使用它们无处不在,包括树枝模板和教义的实体,而参数只能从访问的地方服务容器。
唯一显著的缺点使用常数对于这种配置值是复杂的重新定义他们的价值观在测试中。
业务逻辑
不创建任何包来组织你的应用程序逻辑
Symfoob娱乐下载ny 2.0发布的时候,应用程序使用包把代码分成逻辑特点:UserBundle, ProductBundle, InvoiceBundle,等等。然而,一捆是可以作为一个独立的软件重用。
如果你需要重用一些功能项目,为它创建一个包(在一个私人存储库,不让它公开)。对于应用程序的其余部分代码,使用PHP名称空间来组织代码而不是包。
使用自动装配自动化应用程序服务的配置
服务自动装配是一个功能,读取类型提示放在构造函数(或其他方法),并自动将正确的服务传递给每一个方法,使其不必要的配置服务明确和简化了应用程序的维护。
尽可能的服务应该是私有的
使服务私人通过阻止你访问这些服务$容器- > get ()
。相反,您将需要使用适当的依赖注入。
使用YAML格式配置自己的服务
如果你使用默认的服务。yaml的配置,大多数服务将自动配置。然而,在一些边缘的情况下你需要手动配置服务(或部分)。
YAML格式建议配置服务,因为它是对新人很友好简洁,但Symfony还支持XML和PHP配置。ob娱乐下载
使用属性来定义实体映射原则
教义实体是纯PHP对象存储在一些“数据库”。教义只有知道您的实体通过映射元数据配置为您的模型类。
学说支持多个元数据格式,但它是推荐使用PHP属性,因为他们是目前最方便、灵活的方式建立和寻找映射信息。
如果您的PHP版本不支持属性,使用注释,这是类似的,但需要安装一些额外的依赖在你的项目中。
控制器
让你的控制器扩展AbstractController
基本控制器
ob娱乐下载Symfony提供了一个基本控制器其中包括快捷键等最常见的需求呈现模板或检查安全权限。
扩展控制器从这个基地控制器夫妇Symfony应用程序。ob娱乐下载耦合通常是错误的,但它可能是在这种情况下,因为控制器不应该包含任何业务逻辑。控制器应该包含几行胶水代码,所以你不是耦合应用程序的重要部分。
使用属性或注释来配置路由缓存和安全
使用属性或注释为路由缓存和安全简化了配置。你不需要浏览几个文件创建不同的格式(YAML、XML、PHP):所有配置只是需要它,它只使用一种格式。
不使用注释来配置控制器模板
的@Template
注释是很有用的,但也涉及到一些魔法。此外,大部分的时间@Template
没有使用任何参数,这使得很难知道哪个模板被呈现。它还隐藏了一个控制器应该返回一个响应
对象。
使用依赖注入来获取服务
如果你扩展了基本AbstractController
,你只能获得最常见的服务(如嫩枝
,路由器
,学说
等),直接从容器通过$ this - >容器- > get ()
或$ this - > get ()
。相反,您必须使用依赖注入来获取服务方法参数类型提示行动或构造函数参数。
使用ParamConverters如果他们方便
如果您正在使用学说,那么你就可以(可选)使用ParamConverter自动查询一个实体并将它作为参数传递给控制器。它还将展示一个404页的如果没有实体可以被发现。
如果一个实体的逻辑路径变量更加复杂,而不是配置ParamConverter,最好让控制器内的教义查询(例如通过打电话来教义库方法)。
模板
使用蛇为模板名称和变量
使用小写snake_case模板名称、目录和变量(如user_profile
而不是userProfile
和产品/ edit_form.html.twig
而不是产品/ EditForm.html.twig
)。
用下划线前缀模板片段
模板片段,也叫“部分模板”,允许重用模板内容。他们的名字前面加上下划线(如更好的区分他们从完整的模板。_user_metadata.html.twig
或_caution_message.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
。
安全
定义一个防火墙
除非你有两个合法的不同的身份验证系统和用户登录(如形式主要网站和一个令牌系统仅供您的API),它的建议只有一个防火墙让事情变得简单。
此外,您应该使用匿名
关键在你的防火墙。如果你需要登录用户对你的网站的不同部分,使用access_control选择。
使用选民来实现细粒度的安全限制
如果您的安全逻辑很复杂,你应该创建自定义安全的选民而不是定义内长表达式@Security
注释。
网络资产
使用Webpack安可来处理网络资产
网络资产CSS、JavaScript和图像文件,让网站的前端外观和伟大的工作。Webpack是最主要的JavaScript编译模块打包机,转换和包资产在浏览器中使用。
Webpack安可是一个JavaScript库,摆脱大部分Webpack复杂性没有隐瞒任何的特性或扭曲其用法和哲学。它最初是为Symfony创建应用程序,但它使用任何技术适用于ob娱乐下载任何应用程序。
测试
冒烟测试你的url
在软件工程中,冒烟测试由“初步测试揭示简单故障严重程度足以拒绝未来的软件发布”。使用PHPUnit)数据提供者您可以定义一个功能测试,检查所有应用程序的url加载成功:
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
/ /测试/ ApplicationAvailabilityFunctionalTest.php名称空间应用程序\测试;使用ob娱乐下载\包\FrameworkBundle\测试\WebTestCase;类ApplicationAvailabilityFunctionalTest扩展WebTestCase{/ * * *@dataProviderurlProvider * /公共函数testPageIsSuccessful(美元url){美元客户端=自我::createClient ();美元客户端- >请求(“得到”,美元url);美元这- >assertResponseIsSuccessful ();}公共函数urlProvider(){收益率(' / '];收益率(' /帖子'];收益率(' / post / fixture-post-1 '];收益率(' /博客/类别/ fixture-category '];收益率(“/档案”];/ /……}}
添加这个测试在创建您的应用程序,因为它需要很少的努力和检查页面没有返回一个错误。以后,你会为每个页面添加更具体的测试。
在功能测试中硬编码的url
在Syob娱乐下载mfony应用程序中,它的建议生成的url使用路由变化时自动更新所有链接URL。然而,如果一个公共URL更改,用户无法浏览它,除非你建立了一个重定向到新的URL。
这就是为什么推荐使用原始url的测试,而不是生成的路线。只要路线发生变化,测试就会失败,你就会知道,你必须设置一个重定向。