首页 > 解决方案 > Codeigniter 4 BadMethodCallException

问题描述

我正在尝试进行用户登录,但我收到了这个错误,我不知道为什么。另外,我不确定我是否可以再提到 1 个问题,或者我是否必须将它分开放在另一个主题上。如果我希望用户使用用户名或电子邮件地址登录,我应该怎么做?

我在这里上传了错误信息

错误似乎在这一行:

$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;
    }
    
}

?>

希望有人可以在这里帮助我。提前致谢!

标签: codeigniter-4

解决方案


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

这就是你所拥有的...

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

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

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

看看这对你来说如何。


推荐阅读