Я работаю в zend framework 2, я использую тип сегмента для всех своих маршрутов, но я заметил использование литерального типа маршрута в приложении скелета zend. Кто они такие?В чем разница между литеральным и сегментным маршрутом?
ответ
Я думаю, что Umair на самом деле спрашивает, какова цель буквального маршрута, когда маршрут сегмента уже охватывает эту функциональность.
Чтобы это объяснить в нескольких словах; Маршрут сегмента делает довольно сложное сопоставление на входе с сгенерированным регулярным выражением, тогда как литеральный маршрут будет проводить простое сравнение строк. Это делает его намного быстрее, и это должно быть предпочтительным, когда не требуется сопоставление параметров.
Буквальное маршрут, кажется, хорошо для одноразовых страниц, как основной пример ниже:
'router' => array(
'routes' => array(
'home' => array(
'type' => 'Literal',
'options' => array(
'route' => '/home',
'defaults' => array(
'controller' => 'homeController',
'action' => 'index',
)
)
)
)
)
Для тех, кто не знаком с маршрутами сегмента. Они являются динамическими и передают сегменты URL в контроллер. Этот пример из Zend Framework 2 Начало работы Учебник
'router' => array(
'routes' => array(
'album' => array(
'type' => 'segment',
'options' => array(
'route' => '/album[/:action][/:id]',
'constraints' => array(
'action' => '[a-zA-Z][a-zA-Z0-9_-]*',
'id' => '[0-9]+',
),
'defaults' => array(
'controller' => 'Album\Controller\Album',
'action' => 'index',
),
),
),
),
),
action
сегмент будет идти к функции в контроллере с этим именем. Таким образом, URL-адрес, как /album/edit/2
, перейдет к функции editAction()
в AlbumController
. Доступ к id
может осуществляться несколькими путями в контроллере.
$id = $this->params()->fromRoute('id');
или
$id = $this->getEvent()->getRouteMatch()->getParam('id');