你好:我正在和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的请求验证?
答案 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)
只需添加“,”
我想在此之后每件事情都顺利进行
这就是我如何使用规则来实现代码可读性
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)。 >
更正自定义请求后,一切正常。