Если я правильно понял, что ошибка валидации возвращается при отлове реквеста, то проблема, вероятно, связана с тем, что вы не передаете ошибки обратно в представление после валидации.
Чтобы исправить эту проблему, вам нужно передать ошибки обратно в представление, чтобы они могли быть отображены. В вашем коде я вижу, что у вас есть props
errors в компоненте, который вы можете использовать для передачи ошибок из контроллера в представление.
Попробуйте изменить функцию
store в контроллере следующим образом, чтобы передать ошибки в представление:
public function store(Request $request) {
$valid = $request->validate(
[
'nickname' => ['required','max:64','string'],
'real_name' => ['required','max:64','string'],
'about' => ['required','max:512','string'],
'type' => ['required','integer','max:4'],
'forum_link' => ['required','url'],
'vkontakte' => ['required','url'],
'leaderships' => ['required','string','max:512']
],
[
'nickname.required' => 'Поле никнейм должно быть заполнено',
'nickname.max' => 'Максимум 64 символа',
'nickname.string' => 'Никнейм должен быть строкой',
'real_name.required' => 'Поле имя должно быть заполнено',
'real_name.max' => 'Максимум 64 символа',
'real_name.string' => 'Поле должно быть строкой',
'about.required' => 'Поле должно быть заполнено',
'about.max' => 'Максимум 512 символов',
'about.string' => 'Поле должно быть строкой',
'type.required' => 'Не выбран тип выдвижения',
'vkontakte.required' => 'Не указан вконтакте',
'vkontakte.url' => 'Вконтакте должен быть ссылкой',
'leaderships.required' => 'Лидерства должны быть заполнены',
'leaderships.string' => 'Error',
'leaderships.max' => 'Максимум 512 символов'
]
);
Conversation::query()->create([
'user_id' => Auth::id(),
'nickname' => $valid['nickname'],
'about' => $valid['about'],
'real_name' => $valid['real_name'],
'leaderships' => $valid['leaderships'],
'who_close' => null,
'type' => $valid['type'],
'vkontakte' => $valid['vkontakte'],
'forum_link' => $valid['forum_link']
]);
return back()->withErrors($valid);
}
Для того чтобы получить ошибки в вашем компоненте, вы можете воспользоваться
props, которые были переданы в компонент.
В вашем коде вы передаете
errors в качестве
props в компонент. Чтобы отображать ошибки валидации, вам нужно проверить, есть ли ошибки в объекте
errors, который передается в
props.
Также, во втором коде, в представлении нужно обращаться к ошибкам валидации через метод
errors вместо
props.errors, поэтому код должен выглядеть так:
<template>
<title>Добавить кандидата</title>
<Navbar />
<MDBRow center style="margin-bottom: 3%; margin-top: 3%;">
<MDBCol md="6">
<div class="card">
<div class="card-body">
<form @submit.prevent="submit">
<div v-if="errors.has('nickname')">{{ errors.first('nickname') }}</div>
<MDBInput type="text" label="Игровой ник" id="nickname" v-model="form.nickname" wrapperClass="mb-4" />
<div v-if="errors.has('real_name')">{{ errors.first('real_name') }}</div>
<MDBInput type="text" label="Реальное имя" id="real_name" v-model="form.real_name" wrapperClass="mb-4" />
<div v-if="errors.has('about')">{{ errors.first('about') }}</div>
<MDBInput type="text" label="О кандидате" id="about" v-model="form.about" wrapperClass="mb-3" />
<div v-if="errors.has('type')">{{ errors.first('type') }}</div>
<MDBRow class="mb-1">
<MDBCol class="d-flex justify-content-center">
<MDBBtnGroup>
<MDBRadio :btnCheck="true" :wrap="false" labelClass="btn btn-secondary" label="Администратор" name="options" value="1" v-model="form.type" />
<MDBRadio :btnCheck="true" :wrap="false" labelClass="btn btn-secondary" label="Помощник" name="options" value="2" v-model="form.type" />
</MDBBtnGroup>
</MDBCol>
<MDBCol class="d-flex justify-content-center">
<MDBBtn type="submit" style="max-width: 80%;" color="primary" block> Начать выдвижение кандидата </MDBBtn>
</MDBCol>
</MDBRow>
</form>
</div>
</div>
</MDBCol>
</MDBRow>
</template>
Обратите внимание на использование
has и
first методов вместо
nickname и
real_name, которые передаются в качестве ключей в массиве ошибок валидации.
Надеюсь, это поможет вам решить проблему с отображением ошибок валидации в вашем приложении.