【问题标题】:Laravel cant able to use Form Request validation in Forgot password controllerLaravel 无法在忘记密码控制器中使用表单请求验证
【发布时间】:2018-05-09 02:20:20
【问题描述】:

在 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

此表单请求验证在其他表单中运行良好

【问题讨论】:

  • 你能用完整的控制器和 AdminForgotPasswordEmailValidation 代码更新你的问题吗??
  • working fine in other forms 这里 forms 表示 controllers ro methods ?分享相关控制器代码?
  • @Sohel0415,更新了完整代码
  • @user2486 我的意思是在另一个控制器中完成的正常 crud 操作中,表单请求正在工作
  • @arunkumar : 检查包含use App\Http\Requests\AdminForgotPasswordEmailValidation; ?

标签: php laravel validation laravel-5.5


【解决方案1】:

这不是路由器分派到的方法,因此依赖注入不会发生在该方法上。 sendResetLinkEmail 是路由指向的内容,它调用validateEmail($request)

php artisan route:list

POST      | password/email                 | password.email     | App\Http\Controllers\Auth\ForgotPasswordController@sendResetLinkEmail

ForgotPasswordController 上覆盖 sendResetLinkEmail 以不调用 $this-&gt;validateEmail($request) 并使签名具有您的请求类的类型提示。

public function sendResetLinkEmail(AdminForgotPasswordEmailValidation $request)

这将解决您的表单请求,从而使其验证。

【讨论】:

    【解决方案2】:

    在你的课前添加这一行

    use App\Http\Requests\AdminForgotPasswordEmailValidation;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-07-13
      • 1970-01-01
      • 2021-12-26
      • 2018-10-20
      • 2020-04-08
      • 2019-02-25
      • 1970-01-01
      • 2019-10-09
      相关资源
      最近更新 更多