получить запрошенный контроллер в предварительном контролере крючка в кодеригенере

Я пытаюсь сделать простое правило маршрутизации, чтобы разрешить доступ только определенным пользователям к определенным контроллерам.

Для этого я хотел бы запустить предварительный контроль и проверить, зарегистрирован ли пользователь с помощью сеанса ci. Тем не менее, я должен знать, к какому контроллеру пользователь хочет получить доступ. Как узнать это в функции hook?

$ This-> router-> fetch_class ();

Расширьте CI_Controller, и это должно сработать.

Я не думаю, что крючки – лучшая практика для того, чего вы хотите достичь здесь

вы можете попробовать следующее: вам нужно создать средний контроллер, который вы продлеваете вместо CI_Controller, который будет проверять аутентификацию и перенаправлять пользователя на правый контроллер

прочитайте этот учебник, созданный jondavidjohn шаг за шагом

http://jondavidjohn.com/blog/2011/01/scalable-login-system-for-codeigniter-ion_auth

Вы сможете получить эту идею через 10 минут

Не можете ли вы поставить аутентификацию на конструктор контроллера? Он будет вызываться при создании экземпляра элемента, и вы можете проверить его. Также вы всегда можете расширить CI_Controller и поместить туда логику, чтобы вы могли сделать свою проверку там (и предположили, что это -> router-> fetch_class ()).

Если вы не хотите проходить расширенный маршрут контроллера, и я вижу вашу логику там, тогда вам нужно использовать собственный PHP, потому что объект CI не существует в pre_controller_hook.

Итак, получите URI, затем проанализируйте его, чтобы найти контроллер:

$uri = $_SERVER['REQUEST_URI']; $segments = explode("/", $uri); // if you're removing index.php from your urls, then $controller = $segments[0]; // if you're not removing index.php $controller = $segments[1]; 

Расширьте CI_Controller в своей библиотеке автозагрузки.

Что-то вроде этого:

 class MyAuthLibrary extends CI_Controller { var $ci; function __construct() { $this->ci = &get_instance(); $route = $this->ci->router->fetch_class(); if( ($route !== 'login') && !$this->ci->session->userdata('email_address') ) { redirect('login'); } } } в class MyAuthLibrary extends CI_Controller { var $ci; function __construct() { $this->ci = &get_instance(); $route = $this->ci->router->fetch_class(); if( ($route !== 'login') && !$this->ci->session->userdata('email_address') ) { redirect('login'); } } }