2012-05-20 6 views
0

Я использую CodeIgniter, и я хочу создать какой-то фильтр, чтобы узнать, когда пользователь может/не может получить доступ к текущему контроллеру.Создание фильтра из родительского класса?

Если кто-нибудь знает, как реализовать это по-другому, отлично, но о чем я думал (и пытаюсь сделать) заключается в следующем:

CI_Controller - который является базовым классом контроллера CodeIgniter

MY_Controller - основной контроллер, который я использую, который расширяет CI_Controller

[Controller] - любой «физический» контроллер

, что я пытался сделать, это:

MY_Controller.php

class MY_Controller extends CI_Controller{ 

    private static $namespace = null; 

    private static $permission = array('site', 'settings'); 

    public function __construct(){ 
     if ((!isset($_SESSION['user'])) && (in_array(__CLASS__, $permission))){ 
      throw new Exception('Unauthorized'); 
     } 
     parent::__construct(); 
    } 

} 

очевидно, что это не работает, как КЛАССА всегда будет состоять в том MY_Controller и не то, что ребенка объект ... и NAMESPACE не работает.

У кого-нибудь есть идеи? потому что Id действительно ненавидит ставить этот фрагмент кода во всех других классах, и мне будет необходимо позже фильтровать некоторые более сложные вещи ...

ответ

0

Я решил это следующим образом ...просто в конструкторе, я определил текущий класс

class MY_Controller extends CI_Controller{ 
    private static $permission = array('site', 'settings'); 
    public function __construct($currentController = __CLASS__){ 
     if ((!isset($_SESSION['user'])) && (in_array($currentController , $permission))){ 
      throw new Exception('Unauthorized'); 
     } 
     parent::Controller(); 
    } 
} 

при вызове физического контроллера, мы просто написать следующим образом

class PhysicalController extends MY_Controller{ 

    public function __construct(){ 
    parent::__construct(__CLASS__); 
    } 

} 
0

Поскольку ответа пока нет, возможно, это предложение может помочь. Однако это другой подход, который использует модульные расширения - HMVC ...

Как и этот модуль, вы можете иметь модуль «login» с контроллером, который содержит некоторые методы для входа пользователя в систему, для проверки состояния сеанса и запишите пользователя (и т.п.).

В каждом другом модуле теперь вы можете загрузить модуль логин и проверить на статус и переориентировать при необходимости ...

Там в учебнике HMVC: an Introduction and Application я последовал Nettuts, который показывает, как сделать CodeIgniter From Scratch: Day 6 – Login таким образом. Может быть, это помогает. У меня были некоторые трудности, так как это было со старой версией codeigniter. Так может быть this thread помогает.

Это не то, как вы пытаетесь это сделать, но, возможно, это помогает!

0

Я не пробовал, но то, что я увидел в форуме this, могло бы работать для вас. Прогнозируемое код:

class MY_Controller extends Controller{ 
    private static $permission = array('site', 'settings'); 
    public function __construct(){ 
     if ((!isset($_SESSION['user'])) && (in_array(__CLASS__, $permission))){ 
      throw new Exception('Unauthorized'); 
     } 
     parent::Controller(); 
    } 
} 

Но тогда вы должны были бы использовать

class My_controller extends MY_Controller 

вместо

class My_controller extends Controller 
+0

Если я не ошибаюсь контроллер старая версия контроллера CodeIgniter .. В , –

Смежные вопросы