Laravel框架:最佳实践在模型或控制器工作流程中注册用户

时间:2013-09-28 10:36:30

标签: php orm laravel laravel-4 eloquent

我正在阅读很多关于MVC和Laravel的指南,教程。简单的例子,处理用户注册。他们中的大多数建议如下:

用户模型:

Attributes: id, name, email, password

UserController中:

Method getRegister() // Show registration form
Method postRegister()

postRegister()

UserController方法的详细信息
  1. 收集用户输入
  2. 验证模型
  3. 如果失败,请返回错误的getRegister()
  4. 如果通过,请尝试注册用户(哈希密码,使用ORM将用户插入数据库)
  5. 如果失败,请返回异常并重定向到相应的页面。
  6. 如果通过,则返回成功并重定向到适当的页面。
  7. 示例实施:https://github.com/rydurham/L4withSentry

    在此实现中,模型只是用作ORM的接口,仅此而已。

    问题:

    现在我没有敲定上面发布的实现,因为它显示了Cartalyst Sentry如何工作的一个非常好的工作示例......但是,这是注册用户的最佳/适当方式吗?

    整个验证/散列/注册等......是否应该在模型中执行?然后模型会向Controller返回成功或失败以适当地行动吗?

    如果您查看UserController app/controllers/UserController.php,这非常胖,而用户模型app/models/User.php非常瘦。

    e.g。用户模型是否应该使用registerUser()方法执行大部分注册过程?

    目前,用户可以注册自己,或者管理员用户可以注册用户。因此,需要为admin/user/registerlogin/register

    重复大量控制器代码

    如果我的想法是正确的,任何人都可以指出我可能的Fat Model,Skinny Controller实施的方向,以便我能更好地了解它们的工作原理吗?

2 个答案:

答案 0 :(得分:1)

你是对的!在谈论MVC(不仅仅是Laravel)的最佳实践时,您应该保持控制器的纤薄,并且所有应用程序逻辑(包括验证)都应该保存在model中。

尊重边界

  

请记住尊重责任界限。控制器和路线   作为HTTP和您的应用程序之间的中介服务。写作时   大型应用程序,不要使用您的域逻辑混淆它们。

从书中: Laravel:From Apprentice To Artisan (作者:TaylorOtwel Otwell)。检查this detailed answer

答案 1 :(得分:1)

在我看来,是的,模型应该处理验证过程并了解自身的有效性状态。

我认为正是由于这个原因,Colby Rabideau制作了Ardent,它是一个将模型中的验证与您的Eloquent模型中的其他一些简洁功能一起移动的软件包。它现在是Laravel必备的包装。

我见过的大多数现有教程都在控制器中直接使用Validator对象,导致控制器更加胖,这是我远离的。