Здравствуйте, подскажите, пожалуйста, как можно кастомизировать ошибки валидации для ответа из API через Requests.
Сейчас у меня есть файл Resources
<?php
namespace App\Http\Resources;
use Illuminate\Http\Resources\Json\JsonResource;
class Task extends JsonResource
{
public function toArray($request)
{
return [
'id' => $this->id,
'title' => $this->title,
'description' => $this->description,
'estimate' => $this->estimate,
'status' => $this->status,
'created_at' => $this->created_at,
'updated_at' => $this->updated_at,
];
}
}
Файл Requests с правилами валидации и методом withValidator, который кастомизирует мои ошибки, но при успешном прохождении валидации выводит JSON с теми же полями которые я пытаюсь кастомизировать, но пустыми, а хотелось бы выполнить код в контроллере и добавлять в бд данные.
<?php
namespace App\Http\Requests;
use Illuminate\Foundation\Http\FormRequest;
class TaskRequest extends FormRequest
{
public function rules()
{
return [
'Title' => 'required|string',
'Description' => 'required|string',
];
}
public function withValidator($validator)
{
$validator->after(function ($validator) {
$fields = [
'Title' => $validator->errors()->first('Title'),
'Description' => $validator->errors()->first('Description')
];
$validator->errors()->add('fields', $fields);
});
}
}
Файл контроллера
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Http\Requests\TaskRequest;
use App\Task;
use App\Http\Resources\Task as TaskResources;
class TaskController extends Controller
{
public function store(TaskRequest $request)
{
$task = Task::create([
'title' => $request->Title,
'description' => $request->Description,
'backlog_id' => 1,
'status' => 'opened',
]);
$json = [
'id' => 'TASK-'.$task->id
];
return response()->json($json, 201);
}
}
Файл Handler.php
<?php
namespace App\Exceptions;
use Illuminate\Foundation\Exceptions\Handler as ExceptionHandler;
use Throwable;
use Illuminate\Validation\ValidationException;
class Handler extends ExceptionHandler
{
public function render($request, Throwable $exception)
{
if ($request->ajax() || $request->wantsJson())
{
// если это не ошибка валидации, то пишем сообщение, полученное из экземпляра исключения
$message = [$exception->getMessage()];
// если ошибка валидации
if($exception instanceof ValidationException) {
$message = $exception->errors();
}
$json = [
'Errors' => [
'Fields' => isset($message['fields']) ? $message['fields'] : '',
'Global' => isset($message['global']) ? $message['global'] : ''
],
];
// возвращаем массив ошибок
return response()->json($json, 400);
}
return parent::render($request, $exception);
}
}
Роут
Route::apiResources([
'/tasks' => 'TaskController',
]);
Какими еще можно методами воспользоваться для кастомизирования ошибок валидации?