Я уже писал ранее об использовании модуля Router3. Помимо новых возможностей он несколько меняет принципы работы с адресами, в чем я только что убедился, пытаясь прикрутить каптчу (Captcha). Вы наверное в курсе, что каптча генерируется «на лету», а в теле шаблона для изображения прописывается только путь вида «http://localhost/captcha/default«. В дистрибутиве фреймворка в папке SYSPATH есть контроллер Captcha_Controller, который отвечает за показ изображения:
class Captcha_Controller extends Controller { public function __call($method, $args) { // Output the Captcha challenge resource (no html) // Pull the config group name from the URL Captcha::factory($this->uri->segment(2))->render(FALSE); } } // End Captcha_Controller |
Как мы видим, никаких специальных методов нет, просто вычисляется второй аргумент строки URL, который по совместительству является именем профиля (config) для каптчи. Вроде бы все понятно, но ведь после перехода на Router3, как оказалось, свойство URI::$segments не заполняется (напомню, что класс URI является потомком класса Router). Следовательно, надо найти альтернативу методу segment(), чтобы все-таки добраться до второго параметра URL. Включаем голову и понимаем, что второй сегмент — это просто имя метода. Поэтому копируем контроллер из SYSPATH в APPPATH (или MODPATH — по вкусу) и заменяем $this->uri->segment(2) на Router::$method. Теперь все работает.
Здравствуйте. Хороший у вас блог, подписался на рсс ленту. Я пока дождусь выхода 3-й версии, а потом наверное перейду на 3-ю ветку.
Привет. А почему именно «трешка»? Судя по всему, она появится не раньше, чем через два месяца… Я предпочитаю писать проект на 2.3.x версии с потенциальным переходом на 2.4, когда она выйдет. Не люблю я ждать
ну я тоже пользуюсь 2.3.х, просто роутер3 вроде идет с третьей версией и ко второй подлючается как модуль, получается как бы не родной
Ну, не то чтобы совсем не родной… Просто до ума его не довели. А так — вполне работоспособен, мне нравится.
я тоже использую router3, так проблема выплыла в модуле Paginator, он привязан на segment, прилось переписывать и использовать router::$arguments['page']
Я для пагинатора использую Query-строку типа ?page=, так саму спокойнее, что если я поменяю в одном месте механизм формирования УРЛ, мне это в десяти других не аукнется