2017-09-13 12 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の代わりにコントローラーの中でそれを行うのは "ok"ですか? なぜexatclyですか?私はすべてのデータ "管理"がモデルの中で起こるべきだと思った。 – PlayHardGoPro

答えて

0

あなたの例は大丈夫ですが、あなたのコントローラがやってはならない作業が多すぎると思うなら、コードをリファクタリングして作業を転送することができます。

例えば、あなたのコードでは、パスワードは(あなたがしたい場合UserHelperまたはUserQueryのような、または他のヘルパークラス)bcrypt編、あなたが

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

することができますUserモデルで新しい関数を作成することができますされていますこれを使用して直接ユーザーデータを渡すと、パスワードのbcryptが表示されます。

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

は私がコントロールのクラス/メソッド/その他のポイントは、その目的を超えて何かをやっている場合、我々は常に念頭に置くべきだと思う、それは我々がコントロールの別のポイントにそれをリファクタリングを考えなければならない時が来ました。

+1

Laravelのデフォルトクラスであるため、これを質問し始めます。そして私はそれがlaravelのチームよりも間違っている方が簡単だと思います。ありがとう! – PlayHardGoPro

関連する問題