Как валидировать 2 формы одним валидатором? на laravel,
Всем привет. Подскажите пжл.
У меня есть 2 формы:
- для пользователя который авторизован (1 поле)
- для пользователя который не авторизован (3 поля)
Вопросы:
- мне нужно сделать валидацию 1го поля и 2го поля
Как я думаю:
-
- создать 2 валидатора, но как их тогда подключать не через инекцию в контроллере
message(Request $request)а внизу через if?
- создать 2 валидатора, но как их тогда подключать не через инекцию в контроллере
-
- создать 1 валидатор, подключить его через инекцию в контроллере
message(Request $request)но как тогда и чего написать в самом валидаторе, как там отловить зарег или не зарег пользователь?
- создать 1 валидатор, подключить его через инекцию в контроллере
@if(request()->user()) <!-- клиент зарегистрирован -->
<form action="{{ route('message_create') }}" method="POST">
@csrf
<div>Вопрос</div>
<textarea rows="10" cols="45" name="text" >{{old('text')}}</textarea>
@error('text')<label class="error"> {{ $message }}</label>@enderror
<div class="style-button_save">
<button class="button_save">Сохранить</button>
</div>
</form>
@else <!-- клиент без регистрации -->
<form action="{{ route('message_create') }}" method="POST">
@csrf
<div>Имя</div>
<input type="input" name="name" value="{{ old('name') }}">
@error('name')<label class="error"> {{ $message }}</label>@enderror
<div>Телефон</div>
<input type="input" name="phone" value="{{ old('phone') }}">
@error('phone')<label class="error"> {{ $message }}</label>@enderror
<div>Вопрос</div>
<textarea rows="10" cols="45" name="text" >{{old('text')}}</textarea>
@error('text')<label class="error"> {{ $message }}</label>@enderror
<div class="style-button_save">
<button class="button_save">Сохранить</button>
</div>
</form>
@endif
В контроллере:
public function message(Request $request){
$message = new Message();
$message->fill($request->only([
'user_id',
'name',
'phone',
'email',
'text',
'created_at',
'updated_at',
]));
if (Auth::check()){ // если пользователь зарегистрирован
$message->user_id = Auth::user()->id;
}else{ // если пользователь не зарегистрирован
//...
}
$message->save();
return redirect()->back();
}
namespace App\Http\Requests\Message;
use Illuminate\Foundation\Http\FormRequest;
class ProductRequest extends FormRequest
{
public function authorize()
{
return true;
}
public function rules()
{
return [
'name', => 'required|max:60',
'phone', => 'required|max:60',
'email', => 'required|max:60',
'text', => 'required|max:60',
];
}
public function messages()
{
return [
'required' => 'поле обязательно для заполнения.',
'max' => 'максимальное число символов - :max.',
];
}
}
Ответы (1 шт):
Автор решения: Den
→ Ссылка
public function rules()
{
// не зарегистрирован
if($this->user()){
return [
'name' => 'required|max:60',
];
// не зарегистрирован
}else{
return [
'name' => 'required|max:60',
];
}
}