我启动了一个使用 codeigniter 3 构建的网站,并进行了配置更改,例如基本 url、数据库等。这是错误:
遇到 PHP 错误 严重性:警告 消息:未定义的属性:登录::$login 文件名:controllers/Login.php 线路编号:11 回溯: 文件:/home/u753220969/domains/ngapaklaptop.shop/public_html/webngapak/application/controllers/Login.php 线路:11 函数:_error_handler 文件:/home/u753220969/domains/ngapaklaptop.shop/public_html/webngapak/index.php 线路:321 功能:require_once
遇到未捕获的异常 类型:错误 消息:对 null 调用成员函数 getDefaultValues() 文件名:/home/u753220969/domains/ngapaklaptop.shop/public_html/webngapak/application/controllers/Login.php 线路编号:11 回溯: 文件:/home/u753220969/domains/ngapaklaptop.shop/public_html/webngapak/index.php 线路:321 功能:require_once
这是控制器:
<?php
defined('BASEPATH') or exit('No direct script access allowed');
class Login extends MY_Controller
{
public function index()
{
if (!$_POST) {
$input = (object) $this->login->getDefaultValues();
} else {
$input = (object) $this->input->post(null, true);
}
if (!$this->login->validate()) {
$data['title'] = 'NgapakLaptop | Sign In';
$data['input'] = $input;
$this->load->view('partial/header', $data);
$this->load->view('partial/navbar');
$this->load->view('landingpage/login', $data);
$this->load->view('partial/footer');
return;
}
if ($this->login->run($input)) {
redirect(base_url('errors'));
} else {
$this->session->set_flashdata('message', '<div class="alert alert-danger" role="alert"> Gagal login. Cek email dan password Anda.</div>');
redirect(base_url('login'));
}
}
}
这是模型:
<?php
defined('BASEPATH') or exit('No direct script access allowed');
class Login_model extends MY_Model
{
protected $table = 'user'; // Tabel ditentukan manual karena nama class model bukan nama tabel
public function getDefaultValues()
{
return [
'email' => '',
'password' => ''
];
}
public function getValidationRules()
{
$validationRules = [
[
'field' => 'email',
'label' => 'E-Mail',
'rules' => 'trim|required|valid_email'
],
[
'field' => 'password',
'label' => 'Password',
'rules' => 'required'
]
];
return $validationRules;
}
public function run($input)
{
$query = $this->where('email', strtolower($input->email))
->where('is_active', 1)
->first();
if (!empty($query) && hashEncryptVerify($input->password, $query->password)) {
// Jika user ada & password sama, maka buat session
$sess_data = [
'id' => $query->id,
'name' => $query->name,
'email' => $query->email,
'role' => $query->role,
'is_login' => true
];
$this->session->set_userdata($sess_data);
return true;
}
return false;
}
}
/* End of file Login_model.php */
我在我的核心文件夹上进行了自定义配置。 这是MY_Controller核心
<?php
defined('BASEPATH') or exit('No direct script access allowed');
class MY_Controller extends CI_Controller
{
public function __construct()
{
parent::__construct();
$model = strtolower(get_class($this)); // This mewakili file2 yang ada di folder Controllers
// Apakah terdapat file model yang namanya sama dengan controller saat ini?
if (file_exists(APPPATH . 'models/' . $model . '_model.php')) {
// Param 1: load model, 2: nama controller - pasang model pada controller saat ini
$this->load->model($model . '_model', $model, true);
}
}
/**
* Load view with default layouts
public function view($data)
{
$this->load->view('layouts/app', $data);
}
*/
}
/* End of file MY_Controller.php */
代码在本地主机上完美运行,但为什么当我托管到域时会出现此错误?
我不确定这会回答你的问题(应该对其进行评论,但由于文本限制而不能)
似乎
$login
对象未初始化
$this->login->getDefaultValues()
,但 $this->login
似乎未初始化。由于您的控制器是 Login
并且您的模型是 Login_model
,因此模型将以名称 login_model
加载,而不是登录。将登录控制器中的
替换为$this->login->getDefaultValues()
。$this->login_model->getDefaultValues()
Linux 主机区分大小写
Login_model.php
应该看起来像这样。检查文件权限。
这些是导致此问题的常见因素。