Laravel API请求验证

时间:2017-05-03 10:40:16

标签: php laravel laravel-5

你好:我正在和Laravel一起写api。

当我尝试在控制器中使用请求验证时,我不允许使用405方法。当我删除请求验证时,一切都顺利进行。

这是我的路线:

Route::post('product/create', 'Api\v1\ProductController@create');

这是我的控制器:

<?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.'
        ];
    }
}

当我从“创建”方法中删除“CreateProduct $ request”时,一切正常。

如何在api调用中使用Laravel的请求验证?

5 个答案:

答案 0 :(得分:1)

在Product Controller中设置验证。

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...';
}

答案 1 :(得分:0)

只需添加“,”

我想在此之后每件事情都顺利进行

这就是我如何使用规则来实现代码可读性

https://pastebin.com/ivBEf7mT

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

答案 2 :(得分:0)

将此添加到您的例外&gt; handler.php&gt;渲染方法

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

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

希望有所帮助

答案 3 :(得分:0)

正如@oseintow所说:

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

答案 4 :(得分:0)

使用PostMan测试API时,我遇到了同样的问题。事实证明我使用了错误的标头(接受和Content-Type应该是application / json,但是我使用的是application / x-www-form-urlencoded用于Content-Type)。 >

更正自定义请求后,一切正常。