2017-09-13 75 views
0

我正在使用laravel构建一个CRUD,我不确定MVC规则。
我认为所有与数据库(Crud)相关的功能应该在模型内部完成,而不是控制器。但我发现这里面的用户控制器:什么是正确的方式来使用MVC和Laravel

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

我知道这不会持续到数据库中,刚刚返回类用户的新实例。我应该在模型中调用这个函数,然后坚持它吗?
把这个叫做->save()没什么意义。

+0

它仍然发生在用户模型中? 'User :: create' –

+0

'create'将数据保存在数据库中。 – Wreigh

+0

这是“好”在控制器内而不是模型内部? 为什么很快乐?我认为所有的数据“管理”都应该在Model内部发生。 – PlayHardGoPro

回答

0

你的例子没问题,但是如果你认为你的控制器做了太多不应该做的工作,你可以重构你的代码来传输工作。

例如,在你的代码,密码是被bcrypt版,您可以创建User模型的新功能(或其他辅助类,如果你想,像UserHelperUserQuery

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

你可以现在用这个来直接传递用户数据,它将承担密码的作用。

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

我认为我们应该始终把一点,如果一个类/方法/任何其他控制点做的事情超出了它的目的,那就是我们应该认为它重构来控制的另一点的时间。

+1

我开始质疑这是因为它是Laravel的默认类。我认为我比拉拉维尔的球队更容易犯错。谢谢! – PlayHardGoPro

相关问题