如何将失败的注册验证重定向到 url 并在 laravel jetstream fortify 中使用锚点
How to redirect failed validate on register to an url with anchor in laravel jetstream fortify
如果我通过验证器更改验证->失败 return 重定向.....我收到错误,因为登录需要 $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']),
]);
}
那就是给我一个:
Illuminate\Auth\SessionGuard::login():参数 #1 ($user) 必须是类型 Illuminate\Contracts\Auth\Authenticatable,Illuminate\Http\RedirectResponse 给定,在 ....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']),
]);
}
我以前没有这样做过,但也许你可以找到自定义它的方法。 CreateNewUser 在 RegisteredUserController 的存储方法中被调用,第一个 return 是一个 User 的实例。所以在这你可以
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 扩展这个 Register 控制器并修改这个 store 方法
如果我通过验证器更改验证->失败 return 重定向.....我收到错误,因为登录需要 $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']),
]);
}
那就是给我一个:
Illuminate\Auth\SessionGuard::login():参数 #1 ($user) 必须是类型 Illuminate\Contracts\Auth\Authenticatable,Illuminate\Http\RedirectResponse 给定,在 ....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']),
]);
}
我以前没有这样做过,但也许你可以找到自定义它的方法。 CreateNewUser 在 RegisteredUserController 的存储方法中被调用,第一个 return 是一个 User 的实例。所以在这你可以
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 扩展这个 Register 控制器并修改这个 store 方法