codeigniter, библиотека или помощник могут получить доступ через URL?

#php #codeigniter #uri

#php #codeigniter #uri

Вопрос:

В Codeigniter есть библиотека и помощник. Я могу получить доступ к контроллеру и его вспомогательной функции. для примера.

 login/getid
  

Есть ли какой-либо способ получить доступ к библиотеке или помощнику через url?

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

 <img src="/login/get_captcha" />
  

каждый раз, когда я хочу использовать captcha, я должен вызвать login controller.

Итак, я подумал, что должен быть лучший способ сделать это. Если библиотека или помощник могут получить доступ через URL, я могу сделать это для помощника. может получить доступ к представлению другого контроллера без загрузки контроллера входа.

Ответ №1:

Вы можете создать контроллер-оболочку для доступа исключительно к этим функциям и использовать свои маршруты для использования указанных URL-адресов

Пример: yoursite.com/helper/geo/citiesNearZip/90210

 class helperController extends CI_Controller {

    public function __construct()
    {
        parent::__construct();
        $this->load->helper($this->uri->segment(1)); // geo helper in this example

        if($this->uri->segment(2))
        {
            $helper_method = $this->uri->segment(2);
        }
        else
        {
            show_404();
            return false;
        }

        // check if helper has function named after segment 2, function citiesNearZip($zip) in this example...
        if(function_exists($helper_method)
        {
            // Execute function with provided uri params, xss filter, secure, etc...
            // You would also want to grab all the remaining uri params and pass them as 
            // arguments to your helper function
            $helper_method();
        }
    }
}
  

Комментарии:

1. правильно, я могу очистить контроллер оболочки и получить к нему доступ. Я знаю это. Спасибо.

2. Это действительно плохая идея. Вы вообще не можете обрабатывать ошибки при вызовах URL-адресов, делая это — если «geo» является помощником, которого не существует, код просто взорвется. Это «аккуратный взлом», но плохое кодирование

3. Я полагаю, достаточно простой проверки file_exists(APPPATH . '/helpers/' . $this->uri->segment(1) . '.php') . 404, если он отсутствует. Весь код можно настроить для конкретного варианта использования. Я не думаю, что ваша паранойя здесь лично оправдала отрицательный голос, но спасибо за ваше мнение.

Ответ №2:

Нет. Это просто не тот способ, которым фреймворк был разработан для работы.

Если вы думаете, что вам нужно напрямую обращаться к помощнику / библиотеке, то вы, вероятно, делаете что-то не так.

Можете объяснить, что вы пытаетесь сделать? Должен быть лучший способ.