我想在laravel

时间:2018-05-10 09:49:03

标签: php laravel

我已将laravel默认 make:Auth 更新为使用用户名和电子邮件登录。 我只是在

中有覆盖用户名功能

loginController.php to:

public function username()
    {
        $loginType = request()->input('username');
        $this->username = filter_var($loginType , FILTER_VALIDATE_EMAIL) ? 'email' : 'username';
        request()->merge([$this->username => $loginType]);
        $this->property_exists($this, 'username') ? $this->username : 'email';
    }

但收到了错误:

Method [property_exists] does not exist on [App\Http\Controllers\Auth\LoginController].

3 个答案:

答案 0 :(得分:0)

property_exists是一个php函数,而不是某个类的方法。因此,要改善此错误,只需重写代码:

public function username()
{
    $loginType = request()->input('username');
    $this->username = filter_var($loginType , FILTER_VALIDATE_EMAIL) ? 'email' : 'username';
    request()->merge([$this->username => $loginType]);
    property_exists($this, 'username') ? $this->username : 'email';
}

答案 1 :(得分:0)

  

property_exists - 检查对象或类是否具有属性

     

bool property_exists(混合$ class,字符串$ property)

public function username()
{
    $loginType = request()->input('username');
    $this->username = filter_var($loginType , FILTER_VALIDATE_EMAIL) ? 'email' : 'username';
    request()->merge([$this->username => $loginType]);
    property_exists($this, 'username') ? $this->username : 'email';
}

答案 2 :(得分:-1)

LoginController中的username()方法是指请求发送的用户名字段名称。在您的情况下,我会想象字段名称是相同的,但是您使用该字段查找电子邮件或用户名的变化是什么。在这种情况下,你应该能够"欺骗"用户提供程序通过覆盖LoginController中的credentials方法来执行此操作(并且不要覆盖username函数):

protected function credentials(Request $request)
{
    $v = \Validator::make($request->only($this->username()), [
         $this->username() => "email"
    ]);
    if ($v->passes()) {
        return [
           "email" => $request->input($this->username()),
           "password" => $request->input("password") 
       ]; 
    } else {
       return [
           "username" => $request->input($this->username()),
           "password" => $request->input("password") 
       ]; 
    }
}

这将传递给用户提供商,用户提供商将根据email列或username列选择用户,具体取决于传递的内容。