#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:
Нет. Это просто не тот способ, которым фреймворк был разработан для работы.
Если вы думаете, что вам нужно напрямую обращаться к помощнику / библиотеке, то вы, вероятно, делаете что-то не так.
Можете объяснить, что вы пытаетесь сделать? Должен быть лучший способ.