【问题标题】:Prevent Code Repetition CodeIgniter Validation [duplicate]防止代码重复 CodeIgniter 验证 [重复]
【发布时间】:2012-10-03 14:40:50
【问题描述】:

可能重复:
Constructor session validation for different functions

框架:CI(CodeIgniter)

情况

我有 4 个页面(控制器),即:

home login dashboard editprofile

访问

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

  • 登录只能在未经身份验证的情况下访问

  • dashboard 和 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 中的几个问题......唯一的最佳答案是:link here

它说我必须为此使用装饰器模式......但我不清楚我应该怎么做。

【问题讨论】:

标签: model-view-controller validation codeigniter


【解决方案1】:

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

<?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 );
}
}

【讨论】:

  • 非常感谢,我认为这就是答案。
猜你喜欢
  • 1970-01-01
  • 2018-11-03
  • 2015-09-11
  • 1970-01-01
  • 2016-06-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-08-17
相关资源
最近更新 更多