0

我是这样创建codeigniter控制器的:

function Home() {
    parent::Controller();
    if(!$this->session->userdata('id')) 
        redirect ('login');
    $this->load->model('Home_Model');
}

但是当我尝试访问该页面时,现在显示重定向页面。只是显示 404 未找到,但我在控制器上创建 login.php 并在模型上查看 home_model.php。

该代码有什么问题以及如何解决?

谢谢你

4

1 回答 1

1

由于这行: parent::Controller(),我假设您正在使用 CodeIgniter 1。由于您正在构建类似homeand的页面login,我假设您正在开始构建一个新网站。如果我的假设是正确的,我建议您使用最新的 CodeIgniter(目前为 v2.1.0,需要 PHP 5.1.6 或更新版本)。您可以在 CodeIgniter 主页上获取一份副本。

首先,我认为您应该检查您的错误报告级别。它应该类似于error_reporting(E_ALL);调试。如果还没有,请打开它并再次运行代码。也许在那之后你会得到自己的答案:)

之后,您应该为您的构造函数尝试以下代码,以检查您的家庭控制器进程是否符合您的预期。

function Home()
{
    parent::Controller();
    echo 'Home Class Initialized';
}
  1. 它至少应该显示 404 页面。如果它没有打印出任何东西,那么我们需要更多信息。也许您应该打开日志记录并分析您的日志文件:查找/application/config/config.php$config['log_threshold'] = 2;

  2. 如果它打印出 'Home Class Initialized' 后跟 404 消息:请检查您的控制器是否有类似的东西:

    public function index()
    {
        echo 'Invoke default method';
    }
    

    如果还没有,请添加一个。您可能还想看看在这里使用您自己的默认方法

    如果它仍然是 404,那么对不起,我不知道。也许您应该发布更多代码。

  3. 如果它只打印出'Home Class Initialized':很好。现在试试这个

    function Home()
    {
        parent::Controller();
        if ( ! $this->session->userdata('id'))
        {
            echo 'Redirecting to login page';
            //redirect ('login');
        }
        $this->load->model('Home_Model');
    }
    

    如果打印出来Redirecting to login page,现在是时候取消注释//redirect ('login');并检查登录页面了。按照与步骤 1 和 2 相同的路径。如果没有,请检查您的会话数据:var_dump($this->session->userdata('id')您可以在此处了解有关 PHP 虚假的更多信息

  4. 毕竟,如果仍然失败,请考虑使用__construct()PHP 5

    function __construct()
    {
        parent::__construct();
        if ( ! $this->session->userdata('id'))
        {
            redirect ('login');
        }
        $this->load->model('Home_Model');
    }
    

其他:如果你使用这个$this->load->model('Home_Model');,我认为你将不得不像这样调用 home_model$this->Home_Model->foo();否则会出现错误访问 NULL

于 2012-05-25T21:05:32.140 回答