Symfony MVC控制器最佳实践

时间:2015-09-30 08:18:56

标签: php symfony model-view-controller doctrine-orm

在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安全性)
  • 数据库查询(通过Doctrine)
  • “解析和其他逻辑”,用于发送回复(return $this->render('some_template.html.twig');

问题

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

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

因此;这个领域有最终的最佳实践吗?什么属于控制器,并且Doctrine,Twig,Symfony Security“足够”是“在控制器下面”的单独层。

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

1 个答案:

答案 0 :(得分:1)

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

首先,什么是Symfony2?

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

然后,基于这些组件,Symfony2也是一个完整的Web框架。

根据您的项目并根据您的需要,您可以选择一些Symfony2组件并使用它们启动项目,或者您可以使用全栈框架并从其提供的紧密集成中受益盒子。选择两种不同的方法取决于你。

Symfony2是MVC框架吗?

Symfony2实际上是为Controller部件提供工具,View部件,而不是Model部件。您可以手动创建模型或使用任何其他工具,如ORM。当然,Doctrine2和Propel等最着名的ORM存在紧密集成;但它们是可选的依赖项。 Symfony2核心功能不会也绝不会依赖任何ORM。

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

关于最佳做法的Symfony: http://symfony.com/doc/current/best_practices/index.html

您应该阅读此关于控制器最佳做法: http://symfony.com/doc/current/best_practices/controllers.html

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