Как перечислить все имя класса контроллера в codeigniter? - PullRequest
3 голосов
/ 07 мая 2011

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

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

Logan

Ответы [ 2 ]

8 голосов
/ 07 мая 2011

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

$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

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

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

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

0 голосов
/ 07 мая 2011

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

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к этому, а затем просто проверьте интерфейс и запустите аутентификацию.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...