Контент


Captcha и Router3

Я уже писал ранее об использовании модуля 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. Теперь все работает.

Google Bookmarks Digg Reddit del.icio.us Ma.gnolia Technorati Slashdot Yahoo My Web News2.ru БобрДобр.ru RUmarkz Ваау! Memori.ru rucity.com МоёМесто.ru Mister Wong

Опубликовано в напильник.

Теги: , , , .


Комментарии (6)

Будьте в курсе обсуждения, подпишитесь на RSS ленту комментариев к этой записи.

  1. ANT пишет:

    Здравствуйте. Хороший у вас блог, подписался на рсс ленту. Я пока дождусь выхода 3-й версии, а потом наверное перейду на 3-ю ветку.

  2. BIakaVeron пишет:

    Привет. А почему именно «трешка»? Судя по всему, она появится не раньше, чем через два месяца… Я предпочитаю писать проект на 2.3.x версии с потенциальным переходом на 2.4, когда она выйдет. Не люблю я ждать ;)

  3. ANT пишет:

    ну я тоже пользуюсь 2.3.х, просто роутер3 вроде идет с третьей версией и ко второй подлючается как модуль, получается как бы не родной :)

  4. BIakaVeron пишет:

    Ну, не то чтобы совсем не родной… Просто до ума его не довели. А так — вполне работоспособен, мне нравится.

  5. sergey пишет:

    я тоже использую router3, так проблема выплыла в модуле Paginator, он привязан на segment, прилось переписывать и использовать router::$arguments['page']

  6. BIakaVeron пишет:

    Я для пагинатора использую Query-строку типа ?page=, так саму спокойнее, что если я поменяю в одном месте механизм формирования УРЛ, мне это в десяти других не аукнется ;)



Можно включить подсветку кода: <code><pre lang="">...</pre></code>
Разрешены некоторые HTML теги

или используйте trackback.