我正在使用laravel构建一个CRUD,我不确定MVC规则 我认为与数据库(Crud)相关的所有功能都应该在模型内部而不是控制器中完成。但我在用户控制器中找到了这个:
protected function create(array $data)
{
return User::create([
'name' => $data['name'],
'email' => $data['email'],
'password' => bcrypt($data['password']),
]);
}
我知道它不会持久存储到数据库,只返回User类的新实例。我应该在模型中调用此函数,然后坚持下去吗?
调用它来制作->save()
没有多大意义。
答案 0 :(得分:0)
你的例子没问题,但如果你认为你的控制器做了太多不应该做的工作,你可以重构代码来转移工作。
例如,在您的代码中,密码为...
PG::ConnectionBad: could not connect to server: Connection refused
Is the server running on host "localhost" (127.0.0.1) and accepting
TCP/IP connections on port 5432?
could not connect to server: Cannot assign requested address
Is the server running on host "localhost" (::1) and accepting
TCP/IP connections on port 5432?
/usr/local/bundle/gems/activerecord-
4.2.7.1/lib/active_record/connection_adapters/postgresql_adapter.rb:651:in `initialize'
,您可以在bcrypt
模型中创建新函数(或者如果需要,可以创建另一个帮助程序类,如User
或UserHelper
)
UserQuery
您现在可以使用此功能直接传递用户数据,它将承担密码的class User ...
{
public static function registerUser($data)
{
$data['password'] = bcrypt($data['password']);
$user = self::create($data);
return $user;
}
}
。
bcrypt
我认为我们应该始终牢记,如果一个类/方法/任何其他控制点正在做一些超出其目的的事情,那么我们应该考虑将它重构到另一个控制点。