代码点火器 4 BadMethodCallException

Codeigniter 4 BadMethodCallException

我正在尝试进行用户登录,但出现此错误,我无法弄清楚原因。另外,我不确定我是否可以再提 1 个问题,或者我是否必须将它分开到另一个主题上。如果我希望用户使用用户名或电子邮件地址登录,我应该怎么做?

我上传了错误信息here

错误似乎在这一行:

$user = $model->model('username', $this->request->getVar('username'))
                      ->first();

下面是我的代码:

控制器

public function login()
{
    $data = [];
    helper(['form']);
    
    $validation =  \Config\Services::validation();
    
    
    if($this->request->getMethod() == 'post'){
        //validations
        $rules = [
            'username' => 'required',
            'password' => 'required|validateUser[username, password]'
        ];
        
        $errors = [
            'password' => [
                'validateUser' => 'Username or Password don\'t match'
            ]
        ];
        
        
        if(!$this->validate($rules, $errors)){
            $data['validation'] = $this->validator;
        }else{
            $model = new AccountModel();
            
            $user = $model->model('username', $this->request->getVar('username'))
                          ->first();
                          
            $this->setUserMethod($user);
            return redirect()->to('account');
        }
        
    }
    
    echo view('templates/header', $data);
    echo view('account/login');
    echo view('templates/footer');
}

型号

<?php namespace App\Models;

use CodeIgniter\Model;

class AccountModel extends Model{
    
    protected $table = 'users';
    protected $allowedFields = [
        'username',
        'email',
        'firstname',
        'lastname',
        'dob',
        'country',
        'contact',
        'password',
        'created_at',
        'updated_at',
        'created_by'
    ];
    protected $beforeInsert = ['beforeInsert'];
    protected $beforeUpdate = ['beforeUpdate'];
    
    protected function beforeInsert(array $data) {
        
        $data = $this->passwordHash($data);
        return $data;
        
    }
    
    protected function beforeUpdate(array $data) {
        
        $data = $this->passwordHash($data);
        return $data;
        
    }
    
    protected function passwordHash(array $data){
        if(isset($data['data']['password']))
            $data['data']['password'] = password_hash($data['data']['password'], PASSWORD_DEFAULT);
        return $data;
    }
    
}

?>

希望有人能帮助我。提前致谢!

所以你有这一行试图调用一个不存在的名为模型的方法...

这就是你所拥有的...

$user = $model->model('username', $this->request->getVar('username'))
                          ->first();

如果您阅读了 CodeIgniter 用户指南,您会发现您确实想要使用 where 而不是模型...也许是因为您的脑海中一直存在模型,因为这种情况有时会发生。

$user = $model->where('username', $this->request->getVar('username'))->first();

看看它如何为您服务。