2017-05-03 18 views
0

こんにちは:私はLaravelでapiを書いています。Laravel APIリクエストの検証

コントローラで要求の検証を使用しようとすると、405メソッドが許可されません。要求の検証を削除すると、すべてがスムーズに実行されます。ここで

は私のルートである:ここでは

Route::post('product/create', 'Api\v1\[email protected]'); 

は私のコントローラである:ここでは

<?php 

namespace App\Http\Controllers\Api\v1; 

use App\Http\Requests\CreateProduct; 
use Illuminate\Http\Request; 
use App\Http\Controllers\Controller; 
use App\Handlers\Products; 
use Illuminate\Support\MessageBag; 

class ProductController extends Controller 
{ 
    /** 
    * Create Product. 
    */ 
    public function create(CreateProduct $request) 
    { 
     echo 'product created...'; 
    } 
} 

は、私の要求のバリデータです:

<?php 
namespace App\Http\Requests; 

use Illuminate\Foundation\Http\FormRequest; 

class CreateProduct 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', 
      'price' => 'required', 
      'short_description' => 'required' 
     ]; 
    } 

    /** 
    * Set custom validation messages. 
    * 
    * @return array 
    */ 
    public function messages() 
    { 
     return [ 
      'title.required' => 'Please enter a title.', 
      'price.required' => 'Please enter a price.', 
      'short_description.required' => 'Please enter a short description.' 
     ]; 
    } 
} 

Iから "CreateProductの$要求" を削除します"作成"メソッドは、すべてが動作します。

Laravelのリクエスト検証でAPIコールを使用するにはどうすればよいですか?

答えて

1

私はこの後にすべてのものをスムーズに

を実行し、これは私は、コードの可読性のルールを使用する方法だと思う "" 設定の検証を

を追加製品コントローラ。

public function create(Request $request) 
{ 
    $rules=array(
      'title' => 'required', 
      'price' => 'required', 
      'short_description' => 'required' 
     ); 
    $messages=array(
     'title.required' => 'Please enter a title.', 
     'price.required' => 'Please enter a price.', 
     'short_description.required' => 'Please enter a short description.' 
    ); 
     $validator=Validator::make($request->all(),$rules,$messages); 
     if($validator->fails()) 
     { 
      $messages=$validator->messages(); 
      $errors=$messages->all(); 
      return $this->respondWithError($errors,500); 
     } 
    echo 'product created...'; 
} 
+0

おかげで、私がしようとしているがコントローラーからすべてのバリデーションを削除する、理由は、私のAPIとウェブは同じバリデーションを使用し、私は厳密にDRY方法論を多く使用しているできるだけ早くそこで、私は、ルールとメッセージメソッドで独自の検証クラスを作成し、リクエストバリデータと同じものを返します。私はちょうどコントローラにそれらを挿入し、Validator :: make()を使用し、すべての検証ルール/メッセージはコントローラからは除外されます。 –

0

単にで

https://pastebin.com/ivBEf7mT

public function rules() 
    { 
     return [ 
      'title' => 'required', 
      'price' => 'required', 
      'short_description' => 'required', 
     ]; 
    } 
0

> handler.php>

if($exception instanceof \Illuminate\Validation\ValidationException){} 

return parent::render($request, $exception); 

が@oseintowが示唆したように、それは

0

を役に立てば幸い方法レンダリングあなたの例外にこれを追加します。

if ($exception instanceof ValidationException) { 
    return response()->json(['errors'=>$exception->errors()], JsonResponse::HTTP_UNPROCESSABLE_ENTITY); 
}
関連する問題