2017-03-23 52 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将使它(验证)授权所有情况。

现在我想大家都很清楚。