Php 如何进一步清理此控制器?

Php 如何进一步清理此控制器?,php,model,controller,laravel,Php,Model,Controller,Laravel,我正在为我的应用程序使用Laravel,我的注册表将路由到控制器中的postRegister()函数: public function postRegister() { $validator = new Services\Validators\User; if ($validator->passes()) { $user = new User(); $user->firstname = Input::get('firstname');

我正在为我的应用程序使用Laravel,我的注册表将路由到控制器中的
postRegister()
函数:

public function postRegister() {
    $validator = new Services\Validators\User;
    if ($validator->passes()) {
        $user = new User();
        $user->firstname = Input::get('firstname');
        $user->lastname = Input::get('lastname');
        $user->email = Input::get('email');
        $user->password = Hash::make(Input::get('password'));
        $user->birthday = Input::get('birthday');
        $user->save();
        return Redirect::to('login');
    }
    return Redirect::to('register')->withInput()->withErrors($validator->getErrors());
}
现在,我已经成功地将验证移到了一个存储规则和消息的服务,但是我还想将
if($validator->passes())
块移到某个地方,我认为唯一适合这样做的地方就是用户模型。不过,我不能这么做,因为我已经在操作该类的一个实例了

这是我所能做到的最干净、最有效的方法吗?谢谢。

看看

这是一个Laravel软件包,扩展了雄辩的功能。它将几乎完全实现你想要的

就我个人而言,我认为你现在的处境没有任何问题。但Ardent将使您的控制器更加精简。

您可以在Laravel文档中查看。那你就可以了

警告:未测试的代码

public function postRegister() {
    $validator = new Services\Validators\User;
    if ($validator->passes()) {
        $user = new User(array (
          'firstname'=>Input::get('firstname'),
          'lastname'=>Input::get('lastname'),
          'email'=>Input::get('email'),
          'birthday'=>Input::get('birthday'),
          'password'=>Hash::make(Input::get('password'))
        ));
        $user->save();
        return Redirect::to('login');
    }
    return Redirect::to('register')->withInput()->withErrors($validator->getErrors());
}
额外奖励提示-我们可以在密码上使用。那么,用户模型之外的任何人都不需要知道如何对密码进行哈希运算

一旦我们在用户模型中设置了
setPasswordAttribute
函数

class User extends Eloquent {

    public function setPasswordAttribute($value)
    {
        $this->attributes['password'] = Hash::make($value);
    }

}

。。。我们可以通过调用
$user->password=Input::get('password')来设置密码
和值将在保存到模型之前进行散列。

谢谢,我以前使用过Ardent,但那是很久以前的事了,我将再次尝试。我只是想坚持使用MVC,在MVC中,控制器的工作就是控制流量。我不想把它也插入数据库,我明白。然而,我不认为让控制器调用
save
违反MVC范式。控制器没有执行插入操作。它只是告诉模型它应该保持它自己。嗯……是的。好吧,我想你说得很有道理。谢谢你的帮助:)我会尽快接受你的回答。