2015-04-04 111 views
4

以下是我在控制器(Laravel 5)上使用創建/存儲和編輯/更新方法的一種表單驗證請求的解決方案。Laravel表單請求和驗證

這是一個繁瑣而醜陋的黑客攻擊(即它讀取URI段以獲取正在編輯的記錄的ID)。有沒有更好的方法來確定請求是否從編輯/更新請求接收信息? (不直接傳遞$ ID和標誌要求)

/** 
* Sets the basic validation rules that apply to the request. 
* 
* @return array 
*/ 
protected $rules = [  
     'trading_name' => 'required|min:3|max:50|unique:companies', 
     'legal_name' => 'required|min:3|max:50|unique:companies', 
     'legal_identifier' => 'required|min:3|max:50|unique:companies', 
     'status' => 'required', 
     'website' => 'active_url', 
     'type' => 'required', 
     'payment_terms' => 'required|integer|min:0|max:180', 
     'credit_limit' => 'required|integer|min:0|max:500000', 
     'notes' => 'max:2000', 
]; 

/** 
* Sets addition validation rules depending on the request type (i.e. edit & update). 
* 
* 
* @return array 
*/ 
public function rules() 
{ 
    $rules = $this->rules; 
    if ($this->is('companies/*') == true) #Add a ignore self-unique rule as this is a edit&update request 
    { 
     $id = $this->segment(2); 
     $rules['trading_name'] = $rules['trading_name'].',trading_name,'.$id; 
     $rules['legal_name'] = $rules['legal_name'].',legal_name,'.$id; 
     $rules['legal_identifier'] = $rules['legal_identifier'].',legal_identifier,'.$id; 
    } 
    return $rules; 
} 
+0

其實你可以直接調用段的名稱。這個控制器的路線是什麼樣的?我會告訴你如何稱呼它。 – mininoz

+0

控制器是一個laravel「資源」,即Route :: resource('companies','CompaniesController'); @mininoz –

回答

3

如果你按照正確的寧靜路由technqiues - 你可以使用請求類型,而不是 - 對於任何驗證

public function rules() 
{ 
    if($request()->isMethod('put')) 
    { 
     // Update rules here 
    } 

    return $this->rules; 
} 
提供了一個通用的解決方案
+1

太棒了!使用$ this-> isMethod('patch')解決了第一個問題 - 關於如何獲得$ id的任何想法? (來自URL段以外的其他地方) –

+0

我認爲*您可以只執行'$ request() - > id' - 因爲它綁定在路由中嗎? – Laurence

+0

或者試試'$ this-> id' - 可能會有效 – Laurence