2014-02-06 128 views
0

我想从以下行获得当前控制器的名字:路由器错误与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... 
+0

使用hook而不是检查路由器.. pre_system挂钩实现这个 – Sundar

+0

这是一个钩子。 – user2576961

+0

如果钩子是系统级别,那么你可以从$ _SERVER ['REQUEST_URI']变量获得URL详细信息,这很简单,为什么你想尝试在路由器类 – Sundar

回答

1

我没有测试的代码,但尝试:

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中调用它在你的控制器被实例化之后,但在发生任何方法调用之前立即调用

+0

这是测试我不这么认为,这将适用于pre_system会话库不可用或尝试手动加载它并查看即将发生的什么 – Sundar

+0

就像这是一个建议,我不幸得到相同的结果。 – user2576961

+0

你在哪个钩点叫它? –