Codeigniter,扩展类方法的问题

发布于 2024-11-17 23:37:14 字数 707 浏览 0 评论 0原文

我已经有一段时间没有使用 CI 了,我开始对此产生怀疑。

编辑:

class MY_Controller extends CI_Controller {

    public function __construct() {
        parent::__construct();
        if(!$this->session->userdata('usuario')) {
            $this->load->view('login');
        }
    }

}

class Home extends MY_Controller {

    public function __construct() {

        parent::__construct();
        Template::set('title', 'Login');
        Template::set('view', 'home');

    }

    public function index() {

        $this->load->view('template');

    }
}

发生的情况是用户会话无效,它将加载登录视图,但就像在我的Home控制器构造函数方法中调用视图home< /em>,它在同一页面上加载两个视图。

It’s been a while since I don’t use CI and I’m with a starter doubt.

EDIT:

class MY_Controller extends CI_Controller {

    public function __construct() {
        parent::__construct();
        if(!$this->session->userdata('usuario')) {
            $this->load->view('login');
        }
    }

}

class Home extends MY_Controller {

    public function __construct() {

        parent::__construct();
        Template::set('title', 'Login');
        Template::set('view', 'home');

    }

    public function index() {

        $this->load->view('template');

    }
}

What happens is that is the user session is invalid, it will load the login view but as in my Home controller contructor method is calling the view home, its loading both views on the same page.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

戈亓 2024-11-24 23:37:14

不要将其放在钩子中,而是将其放在 __construct() 方法中的 MY_Controller 中。

http://codeigniter.com/user_guide/general/core_classes.html

// file application/core/MY_Controller.php
class MY_Controller extends CI_Controller {

    function __construct()
    {
        parent::__construct();
        // your code here
    }

}

示例 确保在要运行此代码的控制器中扩展 MY_Controller 而不是 CI_Controller。如果您必须更改所有这些,那就这样吧。

更新:您也可以尝试 post_controller_constructor

post_controller_constructor

在实例化控制器后、但在任何方法调用发生之前立即调用。

但我仍然更喜欢 MY_Controller 方法,因为它更灵活。

Don't put this in a hook, put it in MY_Controller in the __construct() method.

http://codeigniter.com/user_guide/general/core_classes.html

Example:

// file application/core/MY_Controller.php
class MY_Controller extends CI_Controller {

    function __construct()
    {
        parent::__construct();
        // your code here
    }

}

Just make sure that you extend MY_Controller instead of CI_Controller in the controllers you want to run this code in. If you have to change all of them, so be it.

UPDATE: You could also try a post_controller_constructor

post_controller_constructor

Called immediately after your controller is instantiated, but prior to any method calls happening.

But I would still prefer the MY_Controller method, as it is more flexible.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文