2016-08-18 6 views
0

私はLaravelで新しく、私はそれを学ぶための小さなプロジェクトを開始します。このため私は問題があり、これを解決する良い方法を探します。Laravelのベストプラクティス:事前定義されたフィールドによる検証

私はドキュメントのような検証メソッドを書いて、この関数でフォームを検証しました。

public static function validate($object, $request) { 
    $object->validate($request, [ 
     'type' => 'in:foo,bar', 
     'name' => 'required', 
     'description' => 'required', 
    ]); 
} 

$obj = new Job(); 
$obj->validate($this, $request); 
[...] 
$obj->save(); 

これはうまくいきますが、一部のモデルには必須のフィールドがありますが、ほとんどの場合はコントローラで事前に定義されています。たとえば、現在のユーザーのuser_idフィールドを持つエントリを作成するとします。

$obj = new Obj(); 
$obj->user_id = Auth::user()->id; 
$obj->validate($this, $request); 
[...] 
$obj->save(); 

user_idは$ requestオブジェクトの一部ではないため、検証されません。

したがって、検証でrequiredを削除するか、2つの異なる検証関数を定義することができます。他の可能性もありますか? $requestにフィールドを追加することは可能でしょうか?最高の可能性は何ですか?

答えて

1

私はこのように、あなたの検証方法で検証シナリオを使用することをお勧めいたします:

public function validate($input, $scenario) 
{ 
    switch ($scenario) 
    { 
     case 'create': 
     case 'update': 
      $rules = [ 
       'first_name' => 'required', 
       'last_name' => 'required', 
       'email' => 'required|email|email_available' 
      ]; 
      break; 

     case 'change_password': 
      $rules = [ 
       'current_password' => 'required|check_current_password', 
       'new_password' => 'required|min:6|confirmed' 
      ]; 
      break; 
    } 

    return Validator::make($input, $rules); 
} 

使用法:$object->validate($input, 'create');

あなたはまた、共通のルールを持つ配列を持つことができますし、それに基づいて新しいルールを追加しますシナリオ。

+0

シナリオで本当にクールなアイデア。私はこれを使用します!ありがとう! – mgluesenkamp

関連する問題