Deprecated: Assigning the return value of new by reference is deprecated in /home/spwebru/com/wp-settings.php on line 472

Deprecated: Assigning the return value of new by reference is deprecated in /home/spwebru/com/wp-settings.php on line 487

Deprecated: Assigning the return value of new by reference is deprecated in /home/spwebru/com/wp-settings.php on line 494

Deprecated: Assigning the return value of new by reference is deprecated in /home/spwebru/com/wp-settings.php on line 530

Deprecated: Assigning the return value of new by reference is deprecated in /home/spwebru/com/wp-includes/cache.php on line 103

Deprecated: Assigning the return value of new by reference is deprecated in /home/spwebru/com/wp-includes/query.php on line 21

Deprecated: Assigning the return value of new by reference is deprecated in /home/spwebru/com/wp-includes/theme.php on line 623
Работаем с маршрутами в CakePHP (часть 2) - Программируем на CakePHP


Сен 20 2008

Работаем с маршрутами в CakePHP (часть 2)

Раздел: МаршрутыМета @ 23:32

В простых приложениях можно обойтись маршрутами по-умолчанию, но в более-менее больших — уже приходится писать свои маршруты — для доступа к панели администрирования, для упрощения адресов часто используемых страниц и т.д. Например, в приложении-блоге логично вместо 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.

И опять — продолжение в следующем посте, не успеваю я перевести сразу больше.

Теги: ,

One Response to “Работаем с маршрутами в CakePHP (часть 2)”

  1. Работаем с маршрутами в CakePHP (часть 3) - Программируем на CakePHP says:

    [...] Работаем с маршрутами в CakePHP (часть 2) [...]

Напиши комментарий!