我正在阅读很多关于MVC和Laravel的指南,教程。简单的例子,处理用户注册。他们中的大多数建议如下:
用户模型:
Attributes: id, name, email, password
UserController中:
Method getRegister() // Show registration form
Method postRegister()
postRegister()
UserController
方法的详细信息
示例实施:https://github.com/rydurham/L4withSentry
在此实现中,模型只是用作ORM的接口,仅此而已。
问题:
现在我没有敲定上面发布的实现,因为它显示了Cartalyst Sentry如何工作的一个非常好的工作示例......但是,这是注册用户的最佳/适当方式吗?
整个验证/散列/注册等......是否应该在模型中执行?然后模型会向Controller返回成功或失败以适当地行动吗?
如果您查看UserController app/controllers/UserController.php
,这非常胖,而用户模型app/models/User.php
非常瘦。
e.g。用户模型是否应该使用registerUser()
方法执行大部分注册过程?
目前,用户可以注册自己,或者管理员用户可以注册用户。因此,需要为admin/user/register
和login/register
如果我的想法是正确的,任何人都可以指出我可能的Fat Model,Skinny Controller实施的方向,以便我能更好地了解它们的工作原理吗?
答案 0 :(得分:1)
你是对的!在谈论MVC
(不仅仅是Laravel)的最佳实践时,您应该保持控制器的纤薄,并且所有应用程序逻辑(包括验证)都应该保存在model
中。
尊重边界
请记住尊重责任界限。控制器和路线 作为HTTP和您的应用程序之间的中介服务。写作时 大型应用程序,不要使用您的域逻辑混淆它们。
从书中: Laravel:From Apprentice To Artisan (作者:TaylorOtwel Otwell)。检查this detailed answer。
答案 1 :(得分:1)
在我看来,是的,模型应该处理验证过程并了解自身的有效性状态。
我认为正是由于这个原因,Colby Rabideau制作了Ardent,它是一个将模型中的验证与您的Eloquent模型中的其他一些简洁功能一起移动的软件包。它现在是Laravel必备的包装。
我见过的大多数现有教程都在控制器中直接使用Validator
对象,导致控制器更加胖,这是我远离的。