参数1需要传递Illuminate\Http\Request实例,但是传递了一个数组。

11

为什么会出现以下错误?

Argument 1 passed to App\Http\Controllers\Controller::validate() must be an instance 
of Illuminate\Http\Request, array given, called in 
app/Http/Controllers/Admin/Auth/AuthController.php on line 72 and defined

功能:

protected function loginValidation($request)
    {
        $rules = array(
          'fname' => 'required|max:255',
          'lname'  => 'required|max:255',
          'email'      => 'required|email|max:255|unique:users',
          'password'   => 'required|min:6|confirmed',
    );
        $this->validate( $request , $rules);
    }
  protected function getLoginCredentials(Request $request)
  {
    $validator = $this->loginValidation(Request::all());

    var_dump($validator); die();

    if($validator->passes())
    {
    return[
    'email'    => Request::input('email'),
    'password' => Request::input('password'),
    'type'     => 1  
    ];

    return true;
    }else{
        return redirect()->back()->withErrors();
    }
  }  

更新的代码:

public function validate($request, $rules)
    {
        $rules = array(
          'fname' => 'required|max:255',
          'lname'  => 'required|max:255',
          'email'      => 'required|email|max:255|unique:users',
          'password'   => 'required|min:6|confirmed',
    );
        $this->validate( $request , $rules);
    }



protected function getLoginCredentials(Request $request)
  {
    $validator = $this->validate($request, $rules);

    if($validator->passes())
    {
    return[
    'email'    => Request::input('email'),
    'password' => Request::input('password'),
    'type'     => 1  
    ];

    return true;
    }else{
        return redirect()->back()->withErrors();
    }
  }  

错误:

Declaration of App\Http\Controllers\Admin\Auth\AuthController::validate() should be compatible with App\Http\Controllers\Controller::validate(Illuminate\Http\Request $request, array $rules, array $messages = Array, array $customAttributes = Array)

你能展示一下验证函数吗? - oseintow
@oseintow 那里是登录验证。 - Jess McKenzie
1个回答

5

更改为

 $validator = $this->loginValidation($request);

使用这个方法,你需要将 Request 的实例传递给 validate 函数。

你正在将一个数组作为 validate 函数的第一个参数进行传递,我猜应该是传递一个 Request 的实例。

$this->validate( $request , $rules);

已更新

protected function loginValidation($request)
{
    $rules = array(
      'fname' => 'required|max:255',
      'lname'  => 'required|max:255',
      'email'      => 'required|email|max:255|unique:users',
      'password'   => 'required|min:6|confirmed',
);
    $this->validate( $request , $rules);
}

protected function getLoginCredentials(Request $request)
{
   $validator = $this->loginValidation($request);

   var_dump($validator); die();

   if($validator->passes())
   {
     return[
      'email'    => Request::input('email'),
      'password' => Request::input('password'),
      'type'     => 1  
  ];

      return true;
   }else{
      return redirect()->back()->withErrors();
   }
}  

@JessMcKenzie - 你现在正在做的事情是一样的。错误信息只是在说你需要传递完整的 Request 对象给该函数,而不是 Request::all() 方法的结果。 - Ambulare
谢谢,现在我遇到了一个错误:未定义变量:rules。 - Jess McKenzie
@JessMcKenzie,你的代码还是和上面完全一样,只是将loginValidation(Request::all())替换为loginValidation($request)了吗? - Ambulare
@oseintow $validator = $this->validate($request, $rules); - Jess McKenzie
我正在更新我的答案,使其变得更加正确。 - oseintow
显示剩余6条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接