Сен 20 2008
Работаем с маршрутами в CakePHP (часть 2)
В простых приложениях можно обойтись маршрутами по-умолчанию, но в более-менее больших — уже приходится писать свои маршруты — для доступа к панели администрирования, для упрощения адресов часто используемых страниц и т.д. Например, в приложении-блоге логично вместо http://example.com/posts/latest для отображения списка последних постов использовать ссылку http://example.com/latest — так короче и проще запомнить.
Собственные маршруты записываются в файл /app/config/routes.php с использованием метода Router:connect().
Определение собственных маршрутов
Метод Router:connect() принимает три входных параметра: URL-адрес, который вы хотите привязать, массив значений по-умолчанию для элементов маршрута, и массив регулярных выражений для определения в URL-адресе элементов маршрута.
В общем случае, формат команды для создания маршрута такой:
1 2 3 4 5 | Router::connect( 'URL-адрес', array('paramName' => 'значение по-умолчанию'), array('paramName' => 'регулярное выражение для поиска') ) |
Первый параметр определяет, какие адреса вы хотите контролировать этим маршрутом. URL-адрес записывается простой строкой, разделенной слешами, но может содержать также звездочку ‘*’ для обозначения произвольного набора символов, а также специальные элементы маршрута (они начинаются с двоеточия). Использование звездочки позволяет объединить целую группу ссылок и направить по одному маршруту, а специальные элементы собирают дополнительные параметры для передачи в функцию вашего контроллера.
После определения url-адреса (или группы адресов), с помощью двух оставшихся параметров функции Router::connect() нужно указать куда будет пересылаться этот запрос. Второй параметр — ассоциативный массив. Ключи массива должны совпадать со специальными элементами маршрута, указанными в url-адресе. Также есть определенные стандартные ключи - :controller, :action и :plugin. Значения этого массива станут значениями по-умолчанию для элементов маршрута, совпадающих с ключами. Рассмотрим следующий пример, перед тем как переходить к третьему параметру функции Router::connect():
1 2 3 4 | Router::connect( '/pages/*', array('controller' => 'pages', 'action' => 'display') ); |
Этот маршрут входит в файл /app/config/routes.php сразу после создания проекта в CakePHP. Этот маршрут обрабатывает все адреса, начинающиеся с /pages/ и передает управление в функцию display() контроллера PagesController. Запрос http://example.com/pages/about будет преобразован в вызов PagesController->display(’about’);.
1 2 3 4 | Router::connect( '/baby', array('controller' => 'products', 'action' => 'display', 5) ); |
А этот маршрут показывает, как использовать второй параметр функции Router::connect() для определения параметров по-умолчанию. Это можно применить, например, для сокращения адресов ссылок на различные группы товаров. Здесь, запрос http://example.com/baby будет преобразован в ProductsController->display(5);, то есть заменит адрес http://example.com/products/display/5.
И опять — продолжение в следующем посте, не успеваю я перевести сразу больше.
Сентябрь 29th, 2008 at 21:04
[...] Работаем с маршрутами в CakePHP (часть 2) [...]