防止代码重复CodeIgniter验证

时间:2012-10-12 18:16:53

标签: model-view-controller validation codeigniter

  

可能重复:
  Constructor session validation for different functions

框架:CI(CodeIgniter)

情况

我有4页(控制器)即:

home login dashboard editprofile

使用

    所有类型的用户都可以访问
  • 主页,无论是否登录

  • 登录必须只有在未经过身份验证的情况下才能访问

  • 只有学生(经过身份验证的用户)才能访问
  • 信息中心和editprofile

我对我的控制器进行了这样的验证:

if($this->session->userdata('isLoggedIn')){
    // stay here do the function
} else {
// leave this page
    header('Location:'.base_url().'login');
}

我的function index(){}

但是当我开发系统时,随着我创建更多方法,更多控制器,它变得更加混乱...... 因为你需要使用这个

if($this->session->userdata('isLoggedIn')){
// stay here do the function
} else {
// leave this page
header('Location:'.base_url().'login');
}

每当你有方法时,

我已经在stackoverflow中阅读了几个问题......唯一最好的答案是:链接到这里

它说我必须使用装饰模式...但我不明白我怎么想这样做。

1 个答案:

答案 0 :(得分:2)

为每种类型的用户创建不同的基本控制器,然后您只需设置一次该语句。我们的用户控制器如下所示:

<?PHP
class User_Controller extends MY_Controller
{
function __construct()
{
    parent::__construct();      
    if (!$this->session->userdata('is_logged_in')) {
        $this->session->set_flashdata('message', "I'm sorry, but you must  be logged in to view that page.");
        redirect("/");
    }
}
}

然后我们想要登录用户访问的任何控制器都会自动扩展User_Controller,确保只有在您登录时才能使用任何功能。您需要将其保存到核心文件夹才能扩展它。

您还需要将此添加到config.php中,以使基本控制器具有除MY _

之外的任何前缀
function __autoload($class)
{
if(strpos($class, 'CI_') !== 0)
{
    @include_once( APPPATH . 'core/'. $class . EXT );
}
}