1

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

用户模型:

Attributes: id, name, email, password

用户控制器:

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

postRegister()在方法的进一步细节UserController

  1. 收集用户输入
  2. 验证模型
  3. 如果失败,返回 getRegister() 并返回错误
  4. 如果通过,尝试注册用户(哈希密码,使用ORM将用户插入数据库)
  5. 如果失败,返回异常并重定向到适当的页面。
  6. 如果通过,则返回成功并重定向到相应的页面。

示例实现:https ://github.com/rydurham/L4withSentry

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

问题:

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

整个验证/散列/注册等...不应该在模型中执行吗?那么模型将成功或失败返回给Controller以适当地采取行动?

如果你看一下 UserController app/controllers/UserController.php,它非常胖,而 User 模型app/models/User.php非常瘦。

例如,用户模型是否应该没有一个registerUser()可以执行大部分注册过程的方法?

目前,用户可以注册自己,或者管理员用户可以注册用户。因此,需要重复大量控制器代码,admin/user/register并且login/register

如果我的想法是正确的,任何人都可以指出潜在的 Fat Model,Skinny Controller 实现的方向,以便我可以更多地了解它们是如何工作的?

4

2 回答 2

1

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

尊重边界

记住要尊重责任界限。控制器和路由充当 HTTP 和您的应用程序之间的中介。编写大型应用程序时,不要将它们与您的域逻辑混淆。

来自书籍:Laravel:从学徒到工匠(作者:TaylorOtwel Otwell)。检查这个详细的答案

于 2013-09-28T10:55:30.280 回答
1

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

我相信正是出于这个原因 Colby Rabideau 制作了Ardent,它是一个将验证转移到模型以及 Eloquent 模型中的其他一些简洁功能的包。它现在在我的 Laravel 必备包中。

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

于 2013-09-28T10:59:05.283 回答