2013-02-14 1 views

ответ

17

Я думаю, что Umair на самом деле спрашивает, какова цель буквального маршрута, когда маршрут сегмента уже охватывает эту функциональность.

Чтобы это объяснить в нескольких словах; Маршрут сегмента делает довольно сложное сопоставление на входе с сгенерированным регулярным выражением, тогда как литеральный маршрут будет проводить простое сравнение строк. Это делает его намного быстрее, и это должно быть предпочтительным, когда не требуется сопоставление параметров.

12

Буквальное маршрут, кажется, хорошо для одноразовых страниц, как основной пример ниже:

'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');