Laravel "Указанные данные неверны" при использовании запроса формы - PullRequest
0 голосов
/ 15 мая 2019

Итак, у меня есть запрос формы, в котором есть правила проверки и некоторые сообщения.

Это моя функция в контроллере (вызывается через vue.axios)

public function store(TaskFormRequest $request, TaskService $service): JsonResponse
{
    $data = $request->validated();

    if (!$task = $service->create($data)) {
        return JsonResponse::create(['message' => __('Can\'t create Task')], 400);
    }

    return JsonResponse::create(
        [
            'task_id' => $task->id,
            'message' => __('Task was successfully added.'),
        ]
    );
}

Работает нормально,за исключением того, что моментальное хранилище вызывается (и $ request считается экземпляром TaskFormRequest), когда данные не проверены, он возвращает JsonResponse «Указанные данные недействительны» в дополнение к сообщениям об ошибках из формы.

Это было бы хорошо, но само сообщение глубоко спрятано в Vendor, и я не могу применить к нему какие-либо переводы, если это не мешает.

Это мой запрос формы:

public function authorize(): bool
{
    return $this->user()->role === 'administrator';
}

public function rules(): array
{
    return [
        'subject' => 'required',
        'date' => 'nullable|date_format:Y-m-s',
        'user' => 'nullable|exists:users,id',
        'task_list_id' => 'required|exists:task_lists,id',
        'privacy' => 'array',
    ];
}

public function messages() {
    return [
        'subject.required' => __("Task name is empty")
    ];
}

Я хочу, чтобы все вместе прекратили этот ответ и просто оставили ошибки в форме.Или, по крайней мере, настроить его.

РЕДАКТИРОВАТЬ: Я думаю, что проблема в том, что запрос пуст?Если я введу значение null по умолчанию в аргументах функции store, я смогу проверить пустой $ request и вернуть JsonResponse, но тогда он не пройдет нормальный процесс проверки.

Ответы [ 2 ]

0 голосов
/ 15 мая 2019

Валидатор выдает Illuminate\Validation\ValidationException, который вы можете перехватить в App\Exceptions\Handler->render() перед отправкой в ​​родительский класс поставщика.

if ($exception instanceof ValidationException) {
    //choose the structure you want. the Validation exception has many methods
    return response()->json(['status' => 'error', 'message' => $exception->getMessage()], 422);
}

edit: перехватить ошибку вСам запрос формы, объявите следующий метод:

public function failedValidation(\Illuminate\Contracts\Validation\Validator $validator)
{
    throw (new \Illuminate\Validation\ValidationException($validator))
                ->errorBag($this->errorBag)
                ->redirectTo($this->getRedirectUrl());
}
0 голосов
/ 15 мая 2019

Что произойдет, когда вы удалите функцию messages()?

(date_format:Y-m-s кажется неправильным, не должно ли быть date_format:Y-m-d?)

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