2017-03-23 152 views
0

我想用表單請求驗證模式,所以我開始通過創建php artisan make:request TaskRequest後,我加入TaskRequest類`Laravel 5.4驗證使用表單請求

public function rules() 
    { 
     return [ 
      'name' => 'required|min:5', 
     ]; 
    } 
    public function messages() 
    { 
     return [ 
      'name.required' => 'A title is required', 
     ]; 
    } 
` 

,並在我的邏輯

Route::post('/tasks',function (\App\Http\Requests\TaskRequest $request){ 

    $task = new \App\Task(); 
    $task->name = $request->input("name"); 
    $task->save(); 

    return response()->json(['task was created',$task], http_response_code()); 
}); 

所以當我嘗試添加一個任務時,我得到錯誤HttpException, This action is unauthorized.,AuthorizationException ...

這對我來說沒有驗證工作。那麼我該如何解決這個問題?

回答

1

每個(自行創建的)請求都有一個authorize函數,用於確定是否允許用戶發送請求。這可以用於檢查管理員權限或類似情況。

在你的情況下,你可以簡單地返回true。更多信息可以在corresponding docs

你的授權功能找到你TaskRequest應該是這樣的:

/** 
    * Determine if the user is authorized to make this request. 
    * 
    * @return bool 
    */ 
    public function authorize() 
    { 
     return true; 
    } 
+0

謝謝@manniL我怎麼能從未創建(任務)時獲得消息,現在我得到拉拉維爾索引頁的頁面HTML? – Akram

+0

不客氣!要顯示驗證錯誤,請參閱[文檔](https://laravel.com/docs/5.4/validation#quick-displaying-the-validation-errors) – manniL

+0

Ok @manniL但我想在驗證時在json中出錯有錯誤,有辦法做到這一點。 – Akram

0

在對包含「形式要求」自定義請求類的驗證邏輯通過return:true;代替return:false;然後它會像魅力一樣工作。

的代碼看起來像什麼如下,

namespace App\Http\Requests; 

    use Illuminate\Foundation\Http\FormRequest; 

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

     /** 
     * Get the validation rules that apply to the request. 
     * 
     * @return array 
     */ 
     public function rules() 
     { 
      return [ 
       'title'=> 'required', 
       'content'=> 'required' 
      ]; 
     } 
    } 

,你可以使用中間件進行身份驗證包含這種形式的網頁...所以我們並不需要一個授權在FormRequest類。所以返回true將使它(驗證)授權所有情況。

現在我想大家都很清楚。