Как перенаправить неудачную проверку при регистрации на URL-адрес с привязкой в laravel jetstream fortify

#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. Я рад этому. Хороша там кодировка!