Как перечислить все имя класса контроллера в codeigniter?

Я хочу создать аутентификацию пользователя с уровнем доступа для моего сайта. Я хочу получить и перечислить все имя класса контроллера для создания группы пользователей.

Заранее спасибо,

логан

Related of "Как перечислить все имя класса контроллера в codeigniter?"

Для этого лучше всего их записать в новый файл конфигурации.

$config['controllers'] = array( 'blog', 'events', 'news', // etc. ); 

В противном случае вы будете сканировать каталоги, которые будут потреблять ресурсы. Но вы можете сделать это так:

  $controllers = array(); $this->load->helper('file'); // Scan files in the /application/controllers directory // Set the second param to TRUE or remove it if you // don't have controllers in sub directories $files = get_dir_file_info(APPPATH.'controllers', FALSE); // Loop through file names removing .php extension foreach (array_keys($files) as $file) { $controllers[] = str_replace(EXT, '', $file); } print_r($controllers); // Array with all our controllers 

Поскольку имена файлов соответствуют именам контроллеров, теперь у вас должен быть массив всех ваших контроллеров. Это не идеально, хотя по нескольким причинам, но должно работать для большинства настроек.

Лично я использую сильно измененную структуру каталогов, поэтому это не сработает для меня, и некоторые контроллеры, которых я тоже хотел бы игнорировать. Другой вариант – кэшировать результаты в файл, но это отдельный учебник.

Я настоятельно рекомендую определить их в конфигурационном файле, таким образом вы можете хранить другую полезную информацию, напрямую связанную с вашим контролем доступа, и избегать огромных накладных расходов на каталоги рекурсивно сканирующих.

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

 interface IAuthorizationRequired { public function __auth(); } 

Теперь создайте свой контроллер (псевдо)

 class BlogController extends CI_Controller implements IAuthorizationRequired { public function __auth() { /*Redirect or Custom*/ } } 

и в вашем модуле авторизации вы загружаете текущий контроллер и выполняете следующее:

 if(($controller instanceof IAuthorizationRequired) && method_exists(array($controller,'__auth'))) { $authed = $controller->__auth(); if(!$authed) { echo 'Authorization Failed'; exit; } } 

В пределах 2.0 вы можете переопределить базовый контроллер и добавить к нему метод __auth, а затем просто проверить интерфейс и запустить auth.