Symfony MVC控制器的最佳实践

fro*_*rli 5 php model-view-controller symfony doctrine-orm

在Symfony/Doctrine/PHP项目中,客户抱怨我们破坏了软件开发最佳实践.投诉是关于源代码的不正确分层以及缺乏单元测试.

  • 这是一个5万美元的子项目.
  • 我相信客户端有一个来自Java世界的专家,也许是Spring Framework,查看源代码.

正如我们所看到的,我们一直在使用适当的MVC.

  • 视图逻辑完全由TWIG处理.
  • 数据库完全由Doctrine处理.
  • 我们使用Symfony的安全访问控制($this->get('security.context')->isGranted('ROLE_ADMIN')$this->get('security.context')->getToken()->getUser().

请注意,Symfony已经改变了模型,因为我们开始了这个项目 - 但仍保持向后兼容.

在控制器中,客户明确表示控制器处理错误:

  • 访问控制(通过Symfony安全)
  • 数据库查询(通过Doctrine)
  • 发送回应的"解析和其他逻辑"(return $this->render('some_template.html.twig');)

这个问题

客户端说最佳实践是让控制器简单地将请求传递到系统中的另一层.

此外,他说用户管理员基于"自定义模型",其中所有用户和角色都存储在数据库中 - 这使得插入不同的访问控制系统变得困难.特别是因为角色名称似乎是硬编码的,例如通过命令($this->get('security.context')->isGranted('ROLE_ADMIN').

所以; 这个领域有最终的最佳实践吗?什么属于控制器,并且Doctrine,Twig,Symfony Security"足够"是"控制器下方"的单独层.

例如,控制器和Doctrine之间是否还有另一层?

var*_*ius 1

资料来源: http: //fabien.potencier.org/what-is-symfony2.html

首先,什么是 Symfony2?

首先,Symfony2 是一组可重用的独立、解耦且内聚的 PHP 组件,可解决常见的 Web 开发问题。

那么,基于这些组件,Symfony2也是一个全栈Web框架。

根据您的项目和需求,您可以选择一些 Symfony2 组件并使用它们启动您的项目,或者您可以使用全栈框架并从它提供的开箱即用的紧密集成中受益。在两种不同的方法之间进行选择实际上取决于您。

Symfony2 是 MVC 框架吗?

Symfony2 实际上是为控制器部分、视图部分提供工具,但不是模型部分。您可以手动创建模型,也可以使用任何其他工具(例如 ORM)。当然,最知名的 ORM(例如 Doctrine2 和 Propel)存在紧密集成;但它们是可选的依赖项。Symfony2 核心功能不依赖任何 ORM,也永远不会依赖任何 ORM。

Symfony2 是一个 HTTP 框架;它是一个请求/响应框架。这才是大事。Symfony2 的基本原则以 HTTP 规范为中心。

Symfony 关于最佳实践: https://symfony.com/doc/current/best_practices.html

您应该认真阅读有关控制器最佳实践的内容: https ://symfony.com/doc/current/best_practices.html#controllers

您可以阅读这个答案/sf/answers/1519132331/