我正在使用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
模型中创建一个新功能(或者如果需要的话,例如UserHelper
或UserQuery
)
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']);
我认为,如果类/方法/任何其他控制点正在做超出目的的事情,那么我们应该始终记住,这就是我们应该考虑将其重构为另一个控制点的时候。