#laravel #fortify #laravel-livewire #jetstream
Вопрос:
Если я изменю проверку с помощью валидатора->не удастся вернуть перенаправление….. Я получаю ошибку, потому что для входа требуется экземпляр $user, и я отправляю ответ.
Это по умолчанию работает хорошо, но не для меня
public function create(array $input)
{
Validator::make($input, [
'name' => ['required', 'string', 'max:255'],
'email' => ['required', 'string', 'email', 'max:255', 'unique:users'],
'password' => $this->passwordRules(),
'terms' => Jetstream::hasTermsAndPrivacyPolicyFeature() ? ['required', 'accepted'] : '',
])->validate();
return User::create([
'name' => $input['name'],
'email' => $input['email'],
'password' => Hash::make($input['password']),
]);
}
Это дает мне:
IlluminateAuthSessionGuard::login(): Аргумент #1 ($user) должен иметь тип IlluminateКонтрактыАутентификацияАутентификация, Задан ответ на перенаправление Http, вызван ….endor/laravel/fortify/src/Http/Controllers/RegisteredUserController.php на линии 57
public function create(array $input)
{
$validator = Validator::make($input, [
'name' => ['required', 'string', 'max:255'],
'email' => ['required', 'string', 'email', 'max:255', 'unique:users'],
'password' => $this->passwordRules(),
'terms' => Jetstream::hasTermsAndPrivacyPolicyFeature() ? ['required', 'accepted'] : '',
]);
if($validator->fails()) {
return Redirect::to(URL::previous() . "#my-anchor")->withInput()->with('error', $validator->messages()->first());
} //Thats I want
return User::create([
'name' => $input['name'],
'email' => $input['email'],
'password' => Hash::make($input['password']),
]);
}
Ответ №1:
Я не делал этого раньше, но, возможно, вы сможете найти способ настроить его. createNewUser вызывается в методе хранилища RegisteredUserController, и первый возвращает экземпляр пользователя. Так что в этом вы можете
if($validation->fails())
return $validation->messages()->first();
и в методе магазина
public function store(Request $request, CreatesNewUsers $creator): RegisterResponse
{
$user = $creator->create($request->all()));
if($user instanceof User::class) {
event(new Registered($user);
$this->guard->login($user);
return app(RegisterResponse::class);
} else
return Redirect::to(URL::previous()."#my-anchor")->withInput()->with('error', $user);
}
Попробуйте это, но я предлагаю вам, если это работает, расширить этот контроллер реестра и просто изменить этот метод хранения
Комментарии:
1. Большое спасибо, я смог немного продвинуться, но теперь: LaravelFortifyHttpControllersRegisteredUserController::store(): Возвращаемое значение должно быть типа LaravelFortifyКонтрактыRegisterResponse, ПодсветкаHttpПеренаправление возвращенного ответа
2. Решено! Только мне нужно было удалить : RegisterResponse как единственный ответ
3. Я рад этому. Хороша там кодировка!