Hola: Estoy escribiendo una api con Laravel.
Cuando trato de usar la validación de solicitudes en el controlador, aparece un método 405 no permitido. Cuando elimino la validación de la solicitud, todo funciona sin problemas.
Aquí está mi ruta:
Route::post('product/create', 'Api\v1\ProductController@create');Aquí está mi controlador:
<?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...'; } }Aquí está mi validador de solicitud:
<?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.' ]; } }Cuando elimino "CreateProduct $request" del método "crear", todo funciona.
¿Cómo puedo usar la validación de solicitudes de Laravel para llamadas a la API?
como sugirió @oseintow:
if ($excepción instancia de ValidationException) {
devolver respuesta()->json(['errores'=>$excepción->errores()], JsonResponse::HTTP_UNPROCESSABLE_ENTITY);
}Establezca la validación en el controlador del producto.
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...'; }Tuve el mismo problema cuando estaba probando mi API con PostMan. Resultó que estaba usando los encabezados incorrectos (Accept y Content-Type deberían ser application/json pero en su lugar estaba usando application/x-www-form-urlencoded para Content-Type).
Después de corregir que la solicitud personalizada funcionaba bien.