繁体   English   中英

Symfony MVC 控制器最佳实践

[英]Symfony MVC best practice for controllers

在 Symfony/Doctrine/PHP 项目中,客户抱怨我们违反了软件开发最佳实践。 抱怨是关于源代码分层不当,以及缺乏单元测试。

  • 这是一个低于 5 万美元的项目。
  • 相信客户端有Java界的高手,可能是Spring Framework,看源码。

正如我们所见,我们一直在使用适当的 MVC。

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

请注意,自从我们开始这个项目以来,Symfony 已经稍微改变了模型——但仍然向后兼容。

在控制器中,客户专门说控制器处理是错误的:

  • 访问控制(通过 Symfony Security)
  • 数据库查询(通过 Doctrine)
  • 用于发回响应的“解析和其他逻辑”( return $this->render('some_template.html.twig');

问题

客户说最好的做法是让控制器简单地将请求传递到系统中更远的另一层

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

所以; 这个领域有明确的最佳实践吗? 属于控制器的东西,是 Doctrine、Twig、Symfony Security,“足够”是“控制器下方”的一个单独层。

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

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

首先,什么是Symfony2?

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

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

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

Symfony2 是一个 MVC 框架吗?

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

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

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

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

您可以阅读此答案https://stackoverflow.com/a/21701890/2160958

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM