代码点火器 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();
看看它如何为您服务。
我正在尝试进行用户登录,但出现此错误,我无法弄清楚原因。另外,我不确定我是否可以再提 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();
看看它如何为您服务。