与MVC和Laravel合作的正确方式是什么



我正在使用Laravel构建一个Crud,我不确定MVC规则。
我认为与数据库(CRUD)有关的所有功能都应在模型内而不是控制器内完成。但是我在用户的控制器中发现了这一点:

protected function create(array $data)
{
    return User::create([
        'name' => $data['name'],
        'email' => $data['email'],
        'password' => bcrypt($data['password']),
    ]);
}  

我知道它不持续到数据库,只是返回类用户的新实例。我应该在模型中调用此功能,然后坚持下去吗?
将其称为->save()没什么意义的。

您的示例还可以,但是如果您认为您的控制器做的工作太多了,则可以重构代码来转移工作。

例如,在您的代码中,密码是bcrypt ED,您可以在User模型中创建一个新功能(或者如果需要的话,例如UserHelperUserQuery

class User ...
{
    public static function registerUser($data)
    {
        $data['password'] = bcrypt($data['password']);
        $user = self::create($data);
        return $user;
    }
}

您现在可以使用它直接传递用户数据,它将承担密码的bcrypt

$new_user = User::registerUser(['username' => 'helloworld', 'password' => 'worldhello']);

我认为,如果类/方法/任何其他控制点正在做超出目的的事情,那么我们应该始终记住,这就是我们应该考虑将其重构为另一个控制点的时候。

最新更新