Laravel 无法在忘记密码控制器中使用表单请求验证
Laravel cant able to use Form Request validation in Forgot password controller
在具有以下验证方法的 ForgotPasswordController 控制器中,
protected function validateEmail(Request $request)
{
$this->validate($request, [
'email' => 'required|email|exists:users'
]);
}
以上工作正常,但我想用 Form Request 验证来验证,所以这里是下面的代码
<?php
namespace App\Http\Controllers\Admin;
use App\Http\Controllers\Controller;
use Illuminate\Foundation\Auth\SendsPasswordResetEmails;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Password;
use App\Http\Requests\AdminForgotPasswordEmailValidation;
class ForgotPasswordController extends Controller
{
/*
|--------------------------------------------------------------------------
| Password Reset Controller
|--------------------------------------------------------------------------
|
| This controller is responsible for handling password reset emails and
| includes a trait which assists in sending these notifications from
| your application to your users. Feel free to explore this trait.
|
*/
use SendsPasswordResetEmails;
/**
* Create a new controller instance.
*
* @return void
*/
public function __construct()
{
$this->middleware('guest:admin');
}
/**
* Display the form to request a password reset link.
*
* @return \Illuminate\Http\Response
*/
public function showLinkRequestForm()
{
return view('admin.passwords.email');
}
public function broker()
{
return Password::broker('admins');
}
protected function validateEmail(AdminForgotPasswordEmailValidation $request)
{
//nothing here
}
}
有一个奇怪的错误,
Type error: Argument 1 passed to App\Http\Controllers\Admin\ForgotPasswordController::validateEmail() must be an instance of App\Http\Requests\AdminForgotPasswordEmailValidation, instance of Illuminate\Http\Request given, called in /home/**/public_html/project/vendor/laravel/framework/src/Illuminate/Foundation/Auth/SendsPasswordResetEmails.php on line 28
此表单请求验证在其他表单中工作正常
在您的 class
之前添加此行
use App\Http\Requests\AdminForgotPasswordEmailValidation;
这不是路由器分派到的方法,因此该方法没有发生依赖注入。 sendResetLinkEmail
是路由指向的地方,调用 validateEmail($request)
.
php artisan route:list
POST | password/email | password.email | App\Http\Controllers\Auth\ForgotPasswordController@sendResetLinkEmail
覆盖 ForgotPasswordController
上的 sendResetLinkEmail
以不调用 $this->validateEmail($request)
并使签名具有针对您的请求的类型提示 class。
public function sendResetLinkEmail(AdminForgotPasswordEmailValidation $request)
这将解决您的表单请求,从而使其生效。
在具有以下验证方法的 ForgotPasswordController 控制器中,
protected function validateEmail(Request $request)
{
$this->validate($request, [
'email' => 'required|email|exists:users'
]);
}
以上工作正常,但我想用 Form Request 验证来验证,所以这里是下面的代码
<?php
namespace App\Http\Controllers\Admin;
use App\Http\Controllers\Controller;
use Illuminate\Foundation\Auth\SendsPasswordResetEmails;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Password;
use App\Http\Requests\AdminForgotPasswordEmailValidation;
class ForgotPasswordController extends Controller
{
/*
|--------------------------------------------------------------------------
| Password Reset Controller
|--------------------------------------------------------------------------
|
| This controller is responsible for handling password reset emails and
| includes a trait which assists in sending these notifications from
| your application to your users. Feel free to explore this trait.
|
*/
use SendsPasswordResetEmails;
/**
* Create a new controller instance.
*
* @return void
*/
public function __construct()
{
$this->middleware('guest:admin');
}
/**
* Display the form to request a password reset link.
*
* @return \Illuminate\Http\Response
*/
public function showLinkRequestForm()
{
return view('admin.passwords.email');
}
public function broker()
{
return Password::broker('admins');
}
protected function validateEmail(AdminForgotPasswordEmailValidation $request)
{
//nothing here
}
}
有一个奇怪的错误,
Type error: Argument 1 passed to App\Http\Controllers\Admin\ForgotPasswordController::validateEmail() must be an instance of App\Http\Requests\AdminForgotPasswordEmailValidation, instance of Illuminate\Http\Request given, called in /home/**/public_html/project/vendor/laravel/framework/src/Illuminate/Foundation/Auth/SendsPasswordResetEmails.php on line 28
此表单请求验证在其他表单中工作正常
在您的 class
之前添加此行use App\Http\Requests\AdminForgotPasswordEmailValidation;
这不是路由器分派到的方法,因此该方法没有发生依赖注入。 sendResetLinkEmail
是路由指向的地方,调用 validateEmail($request)
.
php artisan route:list
POST | password/email | password.email | App\Http\Controllers\Auth\ForgotPasswordController@sendResetLinkEmail
覆盖 ForgotPasswordController
上的 sendResetLinkEmail
以不调用 $this->validateEmail($request)
并使签名具有针对您的请求的类型提示 class。
public function sendResetLinkEmail(AdminForgotPasswordEmailValidation $request)
这将解决您的表单请求,从而使其生效。