2016-08-18 54 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