我是这样创建codeigniter控制器:
function Home() {
parent::Controller();
if(!$this->session->userdata('id'))
redirect ('login');
$this->load->model('Home_Model');
}
但是当我尝试访问该页面时,现在会显示重定向页面。只显示404未找到,但我在控制器上创建了login.php,在模型上也查看了home_model.php。
该代码有什么问题以及如何解决这个问题?
谢谢
答案 0 :(得分:1)
由于这一行:parent::Controller()
,我假设您正在使用CodeIgniter 1.由于您正在构建home
和login
等网页,我假设您正在开始构建新的网站。如果我的假设是正确的,我建议您使用最新的CodeIgniter(目前为v2.1.0,需要PHP 5.1.6或更新)。您可以在CodeIgniter主页上获取副本。
首先,我认为您应该检查错误报告级别。对于调试,它应该类似于error_reporting(E_ALL);
。如果还没有,请将其打开并再次运行代码。也许你会在那之后得到你自己的答案:)
之后,您应该尝试下面的代码,以便构造函数检查您的主控制器是否按预期进行处理。
function Home()
{
parent::Controller();
echo 'Home Class Initialized';
}
至少应该显示404页面。如果它没有打印出来,那么我们需要更多的信息。也许您应该打开日志记录并分析日志文件:查找/application/config/config.php
:$config['log_threshold'] = 2;
如果打印出'Home Class Initialized',请按照404消息进行操作:请检查您的控制器是否包含以下内容:
public function index()
{
echo 'Invoke default method';
}
如果还没有,请添加一个。您可能还想查看使用自己的默认方法here
如果它仍然是404然后抱歉,我不知道。也许你应该发布更多代码。
如果只打印出'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和步骤1的相同路径2。
如果没有,请检查您的会话数据:var_dump($this->session->userdata('id')
。您可以了解有关PHP虚假here
毕竟,如果仍然失败,请考虑使用PHP 5的__construct()
function __construct()
{
parent::__construct();
if ( ! $this->session->userdata('id'))
{
redirect ('login');
}
$this->load->model('Home_Model');
}
其他:如果你使用这个$this->load->model('Home_Model');
,我认为你必须像这样$this->Home_Model->foo();
调用home_model,否则会有错误访问NULL