获得在笨钩precontroller请求控制器(get the requested controll

2019-10-17 12:29发布

我试图做一个简单的路由规则,只允许经过验证的用户对某些控制器。

要做到这一点,我想运行precontroller钩和检查,如果用户使用CI会议记录。 但是,我必须知道用户想要访问哪个控制器。 如何在一个钩子函数知道这一点?

Answer 1:

$这 - >路由器 - > FETCH_CLASS();

扩展是CI_Controller这应该工作。



Answer 2:

我不认为挂钩的最佳做法你想在这里实现什么

你可以尝试以下方法:您需要创建中间控制器,你将用户扩展而非是CI_Controller,将有认证检查和重定向到正确的控制器

阅读本教程由jondavidjohn一步一步创建

http://jondavidjohn.com/blog/2011/01/scalable-login-system-for-codeigniter-ion_auth

您768,16能够10分钟后得到的想法



Answer 3:

不能你只要把认证的控制器构造函数? 当项目实例,你可以做的检查有它就会被调用。 您也可以随时扩展是CI_Controller,把逻辑在里面,这样你可以做你检查的有(和使用这 - >路由器 - > FETCH_CLASS()的建议)。



Answer 4:

如果你不想去扩展控制器的路线,我可以看到有你的逻辑,那么你有因为CI对象不在pre_controller_hook存在这里使用本地PHP。

因此,得到URI,然后解析它来获得控制:

$uri = $_SERVER['REQUEST_URI'];
$segments = explode("/", $uri);

// if you're removing index.php from your urls, then
$controller = $segments[0];

// if you're not removing index.php
$controller = $segments[1];


Answer 5:

在你的自动加载库类扩展是CI_Controller。

事情是这样的:

class MyAuthLibrary extends CI_Controller {
    var $ci;

    function __construct() {

        $this->ci = &get_instance();
        $route = $this->ci->router->fetch_class();

        if( ($route !== 'login') && !$this->ci->session->userdata('email_address') ) {
            redirect('login');
        } 
    }

}


文章来源: get the requested controller in hook precontroller in codeigniter