在CodeIgniter中使用抽象基本控制器

时间:2012-06-08 23:20:10

标签: php codeigniter

我有一组控制器,只有你是管理员(而不是普通用户)才能访问。

因此,在每个控制器的构造函数中,我会这样做:

public function __construct() {
    parent::__construct();
    if (! is_admin()) {
         show_404();
    }
}

有没有更好的方法来执行此操作,而不是将此代码添加到每个管理控制器的构造函数中?

我在想我可以创建一个名为Admin_Controller的基本控制器,它看起来像这样:

public class Admin_Controller extends CI_Controller {

    public function __construct() {
         //the above code goes here
    }
}

然后我所有其他控制器都可以扩展这个类,而不是CI_Controller类。唯一的问题是,我需要将此文件包含在其他控制器的顶部,否则CodeIgniter找不到Admin_Controller

有更好的方法吗?

2 个答案:

答案 0 :(得分:4)

将它放在你的应用程序/核心文件夹中:MY_Controller.php (注意正确使用大写字母)

class MY_Controller extends CI_Controller
{
public function __construct() 
{
     parent::__construct();
     if (! is_admin())
     {
          show_404();
     }
} 

然后在您希望用户登录的所有普通控制器中

class Whatever extends MY_Controller
{
   public function __construct() 
    {
         parent::__construct();
    } 
}

See userguide here on extending core classes

答案 1 :(得分:2)

我认为您可以使用Hooks 我做了同样的事情,但我需要更精确的控制,所以我必须检查每个控制器。并非所有控制器都禁止单个用户使用。