Как создать недоступный контроллер действия? - PullRequest
1 голос
/ 16 мая 2011

В одном из моих контроллеров я использую помощник проверки формы codeigniter. Одно из моих правил проверки - созданная мной пользовательская функция, которая возвращает true или false. Проблема в том, что эта функция проверки объявлена ​​внутри класса контроллера. Как запретить пользователям переходить к моей функции проверки в качестве действия контроллера (mysite / mycontroller / my_callback_func)?

P.S. - Попытка установить функцию как конфиденциальную, но я получаю сообщение об ошибке, что она недоступна для помощника проверки.

Ответы [ 3 ]

3 голосов
/ 16 мая 2011

Просто начните имя функции / метода с подчеркивания.

Прямо из ./system/core/CodeIgniter.php:

/*
 * ------------------------------------------------------
 *  Security check
 * ------------------------------------------------------
 *
 *  None of the functions in the app controller or the
 *  loader class can be called via the URI, nor can
 *  controller functions that begin with an underscore
 */
    $class  = $RTR->fetch_class();
    $method = $RTR->fetch_method();

    if ( ! class_exists($class)
        OR strncmp($method, '_', 1) == 0
        OR in_array(strtolower($method), array_map('strtolower', get_class_methods('CI_Controller')))
        )
    {
        show_404("{$class}/{$method}");
    }
1 голос
/ 14 августа 2012

просто определите свою функцию private и введите uderscore перед именем функции, например:

class Some_class extends CI_Controller{

     private function _some_method(){}
}
0 голосов
/ 16 мая 2011

Я бы вместо этого сделал это вспомогательной функцией. Для этого поместите файл в system/application/myval_helper.php, затем добавьте туда свою функцию. Тогда просто позвоните:

$this->load->helper('myval');

И вы сможете получить доступ к функции. Другая альтернатива - просто использовать .htaccess для блокировки этого точного URL.

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