有关单个操作控制器的主题在laravel文档中:
https://laravel.com/docs/5.5/controllers#single-action-controllers
我的问题是,您将使用此控制器的用例是什么?如果您选择为所有控制器使用单一动作控制器,您将如何构建控制器?
答案 0 :(得分:2)
Michale Dyrynda似乎在blog https://dyrynda.com.au/blog/single-action-controllers-in-laravel中总结了单动作控制器的用途:{/ 3}}
<强>结论强>
单一操作控制器是将简单功能包装到明确命名的类中的有效方法。
它们可用于您不一定遵循RESTful方法的情况;注意不要跨多个控制器分离单个实体的多个动作。
您可能以前在多个静态页面中使用过单个控制器,可以为每个静态页面考虑单独的命名控制器。
您可以向此类添加其他方法,但它们应与此控制器负责的单个操作相关。
他还指出,只有当您只需要一个实体的单一操作时,您才应该使用这些:
您可以考虑将控制器命名为
ShowPost
,以明确控制器的意图,但我建议谨慎使用此方法;如果你开始看到ShowPost
,EditPost
,CreatePost
等控制器爬进你的代码库,我就会重新考虑RESTful方法。更多的控制器从不伤害任何人,但是我们应该在完成这项工作时保持警惕!
答案 1 :(得分:0)
这是一个有趣的问题,我的答案与laravel无关,而是与每个控制器的单个动作或多个动作有关。
我发现当尝试为新模式找到用例时,是要提出相反的问题,在这种情况下,每个控制器的多个动作的用例何时才有意义?
答案通常是:
您有一个具有Crud操作的对象(因为使用sql) 并将与该对象相关的所有内容放入其中的便利 一个点。
这类似于“我有一把锤子,所以一切都是螺丝”的答案,并且如果,您的域就像在Crud数据库上的薄层一样简单,那就是使用每个控制器有多个动作的情况。
我发现,无论您的模型有多好,任何数量的复杂性都会炸毁控制器。原因是CRUD的操作属于您的模型,而不是您的控制器。
我们通常认为我们可以将其很好地映射到控制器中的CRUD模型,在此之前,有许多前端框架在此方面都非常出色。...
查看应用程序最常见的方面,即用户。在设置中,您将拥有用户索引,除了管理员,我不知道谁会看到该页面,他们通常需要其他信息。因此对于索引操作,您需要管理员自定义身份验证。
然后创建,好吧,让用户创建用户没有意义,您需要确保该用户未通过身份验证。
现在我们谈论阅读。管理员,其他用户,当前用户和匿名用户可以看到的数据截然不同,并且会逐渐增加其复杂性。
然后删除,这通常是很少见的动作,并且在某些型号上不需要,但是您仍然可以放下它,因为,您有锤子了。
更新,您也将密码更新放在这里吗?如果用户忘记了密码怎么办?你把它放在这里吗?不,您需要执行一个名为“忘记密码”的新操作。 好了,现在您需要更新密码操作。通常,更新一年后会发生巨大的混乱。
每种模式都有其优缺点,我的一般建议是,当您的系统完全CRUD OR 时,每个控制器都应执行多个操作,而您不必将项目维护超过一年。如果您有任何需要维护的复杂性,请避免模型泄漏到控制器中并使它们分开。