使Codeigniter CMS干燥

时间:2012-12-10 19:51:26

标签: php codeigniter

我看过一些网站讨论如何创建一个已登录的功能,让它在每次加载页面后自动运行,而不必在每个控制器中调用该函数,并想知道是否有人可以指向我其中一个因为我失去了与我看到的少数人的联系。

我发现这个网站谈到如何实现这个目标:

philsturgeon.co.uk/blog/2010/02/CodeIgniter-Base-Classes-Keeping-it-DRY

我创建了一个扩展CI_Controller的MY_Controller以及扩展控制我网站主站点的MY_Controller的Frontend_Controller,我还有一个控制我正在创建的CMS的Backend_Controller。

我还有一个Login控制器,它扩展了Backend_Controller。我的问题是如果我想为整个后端区域运行if语句以查看是否存在会话变量isset,如果是,则检查该值是否为数字。如果是,那么让他们重定向到登录,如果没有,然后让他们重定向到控制面板控制器,这也扩展了Backend_Controller。我是否在Backend_Controller中使用if语句?

这就是我想到的。

<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');

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

        if (!!isset($this->session->userdata('xtr'))) && (!is_integer($this->session->userdata('user_variable_id'))))
        {
            redirect('login');
        }
    }
}  

这是实现这个和正确的地方吗?如果是这样,我会做一些特定于登录控制器或其他控制器的事情来管理用户吗?

或者有更好的想法与此合作吗?

1 个答案:

答案 0 :(得分:1)

这个问题对于codeigniter来说真的不是古怪/独特的,这更像是一个面向对象/类的问题,而不是其他任何东西。关于如何从另一个类扩展一个类,以及我可以在我的类的构造函数中实际放入什么,可以更好地询问关于意见问题的问题。但话虽如此,而且更多的是静音点,也许我只是表现得很好。这

这方面的对象/类,你有构造函数/解构函数。通常可以放置变量和函数调用。但是我不确定if语句是否会起作用,也许如果你在类中包含相同if-else的函数/方法,并且让它相应地进行出价,它会比在构造。

然而,基于我在一段时间后读到的内容,我会根据自那时以来发生的变化......

我想说看看

What can I add in constructors in PHP?

http://php.net/manual/en/language.oop5.decon.php

这可能能够更好地帮助你,然后我可以使用它,因为我已经有一段时间了,因为我做了一个完整的课程,我创造了比现在更多的方法,我知道从PHP v 5.3.2 5.3.3由于与旧版php和更新版本的兼容性,整个逻辑的工作方式发生了一些变化。总而言之,我认为这更像是一种提供指导的方式,而不是直接回答问题。

我将依靠可能的引擎盖,很可能依赖于你的PHP机会版本是if-else,在构造中不是你想要做的事情,而是创建一个从构造中调用的方法。 / p>