Пользовательский маршрут PUT с FormRequest в Laravel - PullRequest
0 голосов
/ 21 сентября 2018

Я хочу создать собственный маршрут PUT для управления AJAX-запросом

Route::post('some/{id}/another/new', 'SomeController@store');
Route::put('some/{cid}/another/{id}/edit', 'SomeController@update');

и хочу использовать FormRequest в качестве параметра запроса

/**
 * Store a newly created resource in storage.
 *
 * @param  \Illuminate\Http\Request  $request
 * @return \Illuminate\Http\Response
 */
public function store(DirectionRequest $request)
{
    $data = $request->validated();
    $direction = Direction::create($data);        
    return response()->json($direction, 201);
}

/**
 * Update the specified resource in storage.
 *
 * @param  \Illuminate\Http\Request  $request
 * @param  \App\Direction  $direction
 * @return \Illuminate\Http\Response
 */
public function update(DirectionRequest $request, $clientId, $directionId )
{
    $data = $request->validated();
    $direction = Direction::find($directionId);
    $direction->update($data);
    return response()->json($direction, 201);
}

DirectionRequest.php

<?php
namespace App\Http\Requests;

use Illuminate\Contracts\Validation\Validator;
use Illuminate\Http\Exceptions\HttpResponseException;
use Illuminate\Foundation\Http\FormRequest;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;

class DirectionRequest 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 [
        'country' => 'required|string|max:255'
    ];
}

/**
 * 
 * @return type
 */
public function all($keys = null) {
    $data = parent::all();
    $data['created_by'] = Auth::User()->id;
    return $data;
}

/**
 * 
 * @param Validator $validator
 * @throws HttpResponseException
 */
protected function failedValidation(Validator $validator) {
    throw new HttpResponseException(response()->json($validator->errors(), 422));
}
}

и вызов AJAX

const editData = new FormData();
editData.append("country", document.getElementById('country').value);

return fetch(`/some/` + sidId + `/another/` + id + `/edit`, {
    method: "PUT",
    body: editData,
    headers: new Headers({
        'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
    })
 })
.then(response => {
   if (!response.ok) {
           throw new Error(response.statusText)
   }
   return response.json()
 })
 .catch(error => {
       console.log(error)
 });

И я получаю 422 Unprocessible Entity ошибку, которая возвращает все мои поля модели с ошибками, но они заполняются и отправляются запросом AJAX.

Как использовать FormRequest в пользовательском маршруте, чтобы использовать правила проверки из него?Я не хочу копировать код с правилами, потому что я использую этот FormRequest в другом методе (хранилище), и там он работает

Простой Request показывает положенные данные, но FormRequest не

1 Ответ

0 голосов
/ 23 сентября 2018

После перехода по ссылке @RossWilson laracast.com Я изменил свой тип запроса на POST, а затем я мог проверить входные данные с FormRequest правилами и другие вещи из него

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...