路由器错误与CI
我想从以下行获得当前控制器的名字:路由器错误与CI
$this->router->fetch_class();
我发现线在这里:
https://gist.github.com/svizion/2325988
这是我想要使用它在一个钩子。
<?php
if (!defined('BASEPATH'))
exit('No direct script access allowed');
class Sys_prescript {
public function is_logged_in()
{
$public_access = array('login', 'registration');
if (!in_array($this->router->fetch_class(), $public_access))
{
$user_id = $this -> session -> userdata('user_id');
if (($user_id == FALSE) || (is_numeric($user_id) == FALSE) && (strlen($user_id) < 5))
{
redirect('login');
}
}
}
}
唯一的问题是我的“M收到以下错误
A PHP Error was encountered
Severity: Notice
Message: Undefined property: Sys_prescript::$router
Filename: controllers/sys_prescript.php
Line Number: 9
Fatal error: Call to a member function fetch_class() on a non-object in...
我没有测试的代码,但尝试:
class Sys_prescript {
private $CI;
public function is_logged_in(){
$this->CI =& get_instance();
$public_access = array('login', 'registration');
if (!in_array($this->CI->router->fetch_class(), $public_access))
{
$user_id = $this->CI -> session -> userdata('user_id');
if (($user_id == FALSE) || (is_numeric($user_id) == FALSE) && (strlen($user_id) < 5))
{
redirect('login');
}
}
}
}
为了访问CI的一个实例, ,在post_controller_constructor
中调用你的钩子,而不是在pre_controller
中调用它在你的控制器被实例化之后,但在发生任何方法调用之前立即调用
这是测试我不这么认为,这将适用于pre_system会话库不可用或尝试手动加载它并查看即将发生的什么 – Sundar
就像这是一个建议,我不幸得到相同的结果。 – user2576961
你在哪个钩点叫它? –
使用hook而不是检查路由器.. pre_system挂钩实现这个 – Sundar
这是一个钩子。 – user2576961
如果钩子是系统级别,那么你可以从$ _SERVER ['REQUEST_URI']变量获得URL详细信息,这很简单,为什么你想尝试在路由器类 – Sundar