我目前正在使用Symfony2而且我试图将我的代码划分为不同的控制器(如Ajax控制器,用户控制器等......)但我真的不知道什么时候我应该使用创建一个新的。
例如我的DefaultController开始变得非常大(约800行),我想知道是否有一个太长的控制器会影响网站的性能? (加载时间更长......) 而且,如果确实如此,我应该何时将控制器拆分成较小的控制器?
答案 0 :(得分:4)
我想说你应该对你的行为进行分组,这些行动对相同的数据(实体)进行操作,或者在明确的责任范围内运作。例如。用户的UserController,博客文章的PostController等。这意味着如果您想创建一个角色与其他操作不同的操作,请将其放在单独的控制器中。
Symfony正在缓存几乎所有内容,所以我不认为巨大的控制器会对性能造成影响,但如果你有一个数千行的控制器,我不确定它只做一件事。
对于错放的查询和业务逻辑,控制器的大小也可以是警告标志。您应该将QueryBuilder调用分离为Repository类,将其他逻辑分离为服务和事件处理程序。您可以使用注释而不是PHP代码来保存更多行。
答案 1 :(得分:1)
我认为从每个相关模型的控制器开始,使用CRUD结构是一个好主意。
当然这取决于你的需求,但是如果你有一个模型" Post",你可能需要一个带有CRUD路线和方法的PostController,比如:index(/ posts),new,update,创建,删除...... 根据您的需要,您可以删除或添加相对于a的某些方法 从这个基础结构发布。
尝试检测defaultController中与特定模型相关的内容,并为其创建控制器。
祝你好运。答案 2 :(得分:1)
@riska和@Yoann所说的一切都是正确的。
另外,如果我确定它只包含那个方法,我更喜欢不来创建单独的控制器。在这种情况下,我只需将其放入DefaultController
。
答案 3 :(得分:1)
根据我的经验,控制器是UI层的一部分。如果您非常关心如何保持控制器的小型化,那么让我为您提供控制器必须做的最佳方案:
1.Call the appropriate service
2.Return the response
这是每个控制器操作的2行代码,或者您甚至可以将它放在一行中。
与上述人士一样,控制人员通常会根据他们所经营的实体/服务类型分开。例如,如果您有一个实体 - 让我们说User,则最有可能出现以下操作:createAction,editAction,removeAction,registerAction,activateAction,loginAction,logoutAction等等......
如果您的控制器很薄或很胖,它对性能没有任何影响。代码将在类似的流程中执行,所有类都在生产环境中缓存。