Codeigniter 3 登录代码在本地主机上运行良好,但在域中部署时无法运行

问题描述 投票:0回答:1

我启动了一个使用 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 */

代码在本地主机上完美运行,但为什么当我托管到域时会出现此错误?

php codeigniter deployment codeigniter-3
1个回答
0
投票

我不确定这会回答你的问题(应该对其进行评论,但由于文本限制而不能)

  1. 似乎

    $login
    对象未初始化

    • 在您的控制器中,您尝试访问
      $this->login->getDefaultValues()
      ,但
      $this->login
      似乎未初始化。由于您的控制器是
      Login
      并且您的模型是
      Login_model
      ,因此模型将以名称
      login_model
      加载,而不是登录。

    将登录控制器中的

    $this->login->getDefaultValues()
    替换为
    $this->login_model->getDefaultValues()

  2. Linux 主机区分大小写

    • 确保所有文件名及其引用都使用相同的。例如,
      Login_model.php
      应该看起来像这样。
  3. 检查文件权限。

这些是导致此问题的常见因素。

© www.soinside.com 2019 - 2024. All rights reserved.