组织您的业务逻辑

编辑该页面

警告:你浏览的文档欧宝体育电话欧宝娱乐app下载地址Symfony 4.1,不再维护。

这个页面的更新版本Symf欧宝娱乐app下载地址ony 6.2(当前的稳定版本)。

组织您的业务逻辑

在计算机软件中,业务逻辑或域逻辑是“程序编码的一部分真实的业务规则,确定如何创建数据,显示,存储,和改变”(阅读完整的定义)。

在Sy欧宝娱乐app下载地址mfony应用程序中,业务逻辑的所有自定义代码编写应用程序,不是特定于框架(如路由和控制器)。域类,教义实体和常规PHP类作为服务是业务逻辑的好例子。

对于大多数项目,你应该存储内的所有代码src /目录中。在这里,您可以创建任何你想要的目录组织方面:

1 2 3 4 5 6 7 8 9
欧宝娱乐app下载地址公共/前台/├─配置/├─├─src /│└─跑龙套/│└─MyClass。php├─测试/├─var /└─供应商/

服务:命名和配置

最佳实践

使用自动装配自动化应用程序服务的配置。

服务自动装配是一个Symfony的服务容器管理服务提供的功能以欧宝娱乐app下载地址最小的配置。它读取类型提示你的构造函数(或其他方法),并自动为每个方法传递正确的服务。它还可以添加服务标签需要他们的服务,如树枝扩展,事件订阅者,等等。

博客应用程序需要一个实用程序,可以将文章标题(如。“Hello World”)到一个鼻涕虫(如。“hello world”),包括作为URL的一部分。让我们创建一个新的重击者内部类src /跑龙套:

1 2 3 4 5 6 7 8 9 10
/ / src / Slugger.php跑龙套名称空间应用程序\跑龙套;重击者{公共函数slugify(字符串美元价值):字符串{/ /……}}

如果你使用默认的服务。yaml的配置,这类auto-registered作为服务的IDApp \跑龙套\棒球强击手(或者只是巨炮::类如果类已经导入到您的代码)。

最佳实践

应用程序的id的服务应该等于他们的类名,除非你有多个服务配置为同一个类(在这种情况下,用一条蛇例id)。

现在您可以使用定制的棒球强击手在其它任何服务或控制器类,如AdminController:

1 2 3 4 5 6 7 8 9 10 11 12 13
使用应用程序\跑龙套\重击者;公共函数创建(请求美元请求轰,美元重击者){/ /……如果(美元形式- >isSubmitted () & &美元形式- >isValid ()) {美元鼻涕虫=美元重击者- >slugify (美元帖子- >getTitle ());美元帖子- >setSlug (美元鼻涕虫);/ /……}}

服务还可以公共或私人。如果你使用默认的服务。yaml的配置默认情况下,所有的服务都是私人。

最佳实践

服务应该私人只要有可能。这将阻止你访问该服务通过$容器- > get ()。相反,您将需要使用依赖注入。

服务形式:YAML

如果你使用默认的服务。yaml的配置,大多数服务将自动配置。然而,在一些边缘的情况下你需要手动配置服务(或部分)。

最佳实践

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

这是有争议的,在我们的经验中,使用YAML和XML是均匀地分布在开发人员中,有轻微的偏好向YAML。两种格式都有相同的性能,最终这是个人口味的问题。

我们建议YAML因为它是友好的新人和简洁。您可以使用任何其他的格式如果你喜欢另一种格式。

使用一个持久层

欧宝娱乐app下载地址Symfony是HTTP框架,它只关心生成每个HTTP请求的HTTP响应。这就是为什么Symfo欧宝娱乐app下载地址ny提供了一种不跟一个持久层(如数据库、外部API)。你可以选择任何你想要的库或策略。

在实践中,许多Symfony应用程序欧宝娱乐app下载地址依赖于独立主义项目使用实体和存储库定义他们的模型。就像业务逻辑,我们建议存储学说中的实体src /实体目录中。

样本的博客应用程序定义的三个实体是一个很好的例子:

1 2 3 4 5 6 7
欧宝娱乐app下载地址前台/├─……└─src /└─实体/├─发表评论。php├─职位。php└─User.php

教义映射信息

教义实体是纯PHP对象存储在一些“数据库”。教义只有知道您的实体通过映射元数据配置为您的模型类。理论支持四元数据格式:YAML、XML、PHP和注释。

最佳实践

使用注解来定义的映射信息主义的实体。

注释是目前最方便的和敏捷的方式建立和寻找映射信息:

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 59 60 61 62
名称空间应用程序\实体;使用学说\ORM\映射作为ORM;使用学说\常见的\集合\ArrayCollection;/ * * *@ORM实体\ * /帖子{常量NUMBER_OF_ITEMS =10;/ * * *@ORM\ Id *@ORM\ GeneratedValue *@ORM\列(类型=“整数”)* /私人美元id;/ * * *@ORM\列(type = "字符串")* /私人美元标题;/ * * *@ORM\列(type = "字符串")* /私人美元鼻涕虫;/ * * *@ORM\列(type = " text ") * /私人美元内容;/ * * *@ORM\列(type = "字符串")* /私人美元authorEmail;/ * * *@ORM\列(type = " datetime) * /私人美元publishedAt;/ * * *@ORM\ OneToMany (* targetEntity =“App \实体\评论”,*的mappedBy =“post”* orphanRemoval = true *) *@ORM\ OrderBy ({“publishedAt”=“ASC”}) * /私人美元评论;公共函数__construct(){美元- >publishedAt =\ DateTime ();美元- >评论=ArrayCollection ();}/ / getter和setter……}

所有格式都有相同的性能,这是又一次最终的味道。

数据设备

设备支持在默认情况下不启用在Symfony中,你应该执行以下命令安装原则装置包:欧宝娱乐app下载地址

1
美元作曲家要求“教义/ doctrine-fixtures-bundle”

然后,这个包是自动启用,但仅为dev测试环境:

1 2 3 4 5
/ /配置/ bundles.php返回(/ /……学说\包\ FixturesBundle \ DoctrineFixturesBundle::类= > [“开发”= >真正的,“测试”= >真正的]];

我们建议创建一个设备类为简单起见,不过欢迎你有更多如果该类相当大。

假如你至少有一个fixture类和数据库访问配置正确,你可以加载装置通过执行下面的命令:

1 2 3 4 5
美元php bin /控制台学说:夹具:负载小心,数据库将被净化。你想继续Y / N ?Y >清除数据库>加载应用程序\ DataFixtures \ ORM \ LoadFixtures

编码标准

Symf欧宝娱乐app下载地址ony的源代码遵循PSR-1PSR-2编码标准所定义的PHP社区。欧宝下载链接你可以了解更多Symf欧宝娱乐app下载地址ony的编码标准甚至使用PHP-CS-Fixer,这是一个命令行实用程序,可以解决整个代码库的编码标准在几秒钟。


下一个:控制器

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