2017-09-02 117 views
1

是否可以在我的函數中創建動態FormRequest驗證?請參閱以下示例代碼。動態FormRequest驗證(Laravel)

public function store(Request $request) 
{ 
    Model::create($request->all()); 
    return redirect(url('/')); 
} 

我的意思是我會將「請求」參數更改爲變量$ formRequest。

我的目標是我想爲單個模型的動態數據集創建不同的驗證規則。

如果我能用其他方式實現這一點,請告訴我。謝謝!

編輯:

示例場景: 我有了名字,中間名和姓的字段的表格。

第一條規則:

public function rules() 
{ 
    return [ 
    'firstname' => 'required', 
    'middlename' => 'required', 
    'lastname' => 'required' 
    ]; 
} 

第二條規則:

public function rules() 
{ 
    return [ 
    'firstname' => 'required', 
    'lastname' => 'required' 
    ]; 
} 

凡在第二條規則只需要姓和名。

我只是想知道是否有其他方式來做到這一點,而不是創建多個商店方法和添加更多的路線。

回答

2

跳過FormRequest並且使用validate方法可以實現$request實例。 Laracasts甚至有一個教訓。

public function store(Request $request) { 
    $rules = [/*...*/]; 

    $attributes = $request->validate($rules); 

    Model::create($attributes); 

    return redirect(url('/')); 
} 
+0

這是我的想法,但如果可能的話,我想只使用一個功能。 – alvirbismonte

+0

我重寫了使用'$ request-> validate'代替的答案。這可能適合你。 – Marwelln

+0

將您的建議與@Sletheren結合起來給了我一個想法。謝謝你們兩位。 – alvirbismonte

1

您可以創建一個自定義的請求:

php artisan make:request CustomRequest 

這會產生這個類:

class CustomRequest extends FormRequest 
{ 
    /** 
    * Determine if the user is authorized to make this request. 
    * 
    * @return bool 
    */ 
    public function authorize() 
    { 
     return false; 
    } 

    /** 
    * Get the validation rules that apply to the request. 
    * 
    * @return array 
    */ 
    public function rules() 
    { 
     return [ 
      // 
     ]; 
    } 
} 

authorize()方法將確定請求可以在第一時間進行驗證。

rules()方法將返回當前請求的驗證規則。

然後在你的控制器功能:

public function yourfunction(CustomRequest $request) 
+0

嗨@Sletheren,是的,我知道這一點。我想要做的是驗證一組動態數據。例如,Data1必填字段爲firstname,middlename,lastname,那麼data2必填字段僅爲firstname,lastname。所以我想到的是我會創建data1Request和data2Request。 – alvirbismonte

+0

是的,你可以做到這一點,你把通用的請求對象,然後用if語句測試(例如:if($ request ['type'] =='data1')然後執行自定義驗證 – Sletheren

+0

那麼,得到一些想法與你說什麼。謝謝@Sletheren – alvirbismonte