如何将注册失败的验证重定向到laravel jetstream fortify中带有锚的url

如何将注册失败的验证重定向到laravel jetstream fortify中带有锚的url,laravel,fortify,laravel-livewire,jetstream,Laravel,Fortify,Laravel Livewire,Jetstream,如果我更改validator验证->返回重定向失败。。。。。我得到错误,因为登录需要$user的实例,我发送了一个响应 这个默认值很好,但对我来说不是 public function create(array $input) { Validator::make($input, [ 'name' => ['required', 'string', 'max:255'], 'email' => ['required', 'string', 'ema

如果我更改validator验证->返回重定向失败。。。。。我得到错误,因为登录需要$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']),
    ]);
}
那就给我一个:

Illumb\Auth\SessionGuard::login():参数#1($user)的类型必须为Illumb\Contracts\Auth\Authenticatable,Illumb\Http\RedirectResponse,在第57行的…endor/laravel/fortify/src/Http/Controllers/RegisteredUserController.php中调用

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']),
    ]);
}

我以前没有这样做过,但也许你可以找到定制它的方法。CreateNewUser在RegisteredUserController的store方法中被调用,第一个方法返回用户的实例。所以在这里你可以

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);
}

尝试一下,但我建议您如果works扩展此寄存器控制器并修改此存储方法

非常感谢,我可以稍微改进一下,但现在:Laravel\Fortify\Http\Controllers\RegisteredUserController::store():返回值的类型必须为Laravel\Fortify\Contracts\RegisterResponse,照亮\Http\RedirectResponse返回已解决!只有我需要删除:RegisterResponse作为唯一的响应我很高兴。那里的编码很好!
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);
}