В предыдущей части мы написали контроллер компонента, умеющий выполнять три типа действий: view_all (показ списка сообщений), add (добавление сообщения), delete (удаление сообщений).
Как контроллер узнает какое из этих действий нужно выполнить в конкретный момент? Он смотрит в переменную $do, которую мы определили так:
//... //Получаем текущее действие из URL страницы $do = $inCore->request('do', 'str', 'view_all'); //...
Переменная $do берет свое значение из адреса страницы (т.е. передается контроллеру методом GET). Если в адресе ее значение не было указано, она принимает значение 'view_all'. То есть, если кто-то наберет в браузере адрес http://site/guestbook, он запустит наш компонент guestbook без каких-либо параметров. Соответственно переменная $do примет значение по-умолчанию – view_all – и мы увидим список всех сообщений гостевой книги.
Теперь разберемся с остальными адресами. Ранее мы договорились что у нас будет два адреса:
Нам нужно связать эти адреса страниц с действиями контроллера. Для этого используется роутер компонента.
Роутер представляет из себя файл router.php находящийся в папке компонента:
<?php function routes_guestbook(){ $routes[] = array( /* маршрут 1 */ ); $routes[] = array( /* маршрут 2 */ ); return $routes; }
Внутри файла определяется функция routes_XXX(), где XXX - название компонента (в нашем случае это «guestbook»). Внутри функции заполняется массив $routes, содержащий маршруты. Каждый маршрут связывает URL страницы с действием контроллера. Для нашего контроллера потребуется 2 маршрута:
<?php function routes_guestbook(){ //добавление сообщения $routes[] = array( '_uri' => '/^guestbook\/add.html$/i', 'do' => 'add' ); //удаление сообщения $routes[] = array( '_uri' => '/^guestbook\/delete([0-9]+).html$/i', 'do' => 'delete', 1 => 'message_id' ); }
Каждый элемент массива $routes тоже является массивом и может содержать следующие записи:
Как мы видим, каждый маршрут содержит регулярное выражение с которым будет сравниваться адрес страницы.
После регулярного выражения идут указания – какие параметры передать контроллеру компонента если адрес совпадет с выражением. Например запись:
'do' => 'add'
означает что будет создана переменная do со значением 'add'. В коде контроллера мы получим это значение с помощью метода request('do') и узнаем, что требуется показать страницу добавления сообщения.
Второй маршрут (для удаления) подразумевает передачу в компонент еще и части адреса в виде переменной message_id. Взглянем еще раз на шаблон адреса для удаления сообщения:
'_uri' => '/^guestbook\/delete([0-9]+).html$/i'
обратите внимание на выражение в круглых скобках: ([0-9]+) и на строчку:
1 => 'message_id'
буквально эту строку можно трактовать как «совпадение из первых круглых скобок нужно передать под именем message_id». Соответственно, если добавить еще одно выражение в круглых скобках в шаблон адреса, то его значение можно будет передать как:
2 => 'second_var'
Больше примеров маршрутов вы можете посмотреть в файлах router.php стандартных компонентов InstantCMS.
Любые вопросы связанные с роутингом можно не стесняясь задавать на форуме.
Реклама спонсоров
Контактные телефоны, адрес. Мобильные стенды.
aztekadv.ru
Программа выбора лучших товаров. Онлайн заказ.
optimum-lab.ru