В чем разница между литеральным и сегментным маршрутом?

Я работаю в zend framework 2, я использую тип сегмента для всех своих маршрутов, но я заметил использование буквенного типа маршрута в приложении скелета zend. Что они?

Ответ 1

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

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

Ответ 2

Литеральный маршрут, по-видимому, хорош для одноразовых страниц, например, базового примера:

'router' => array(
    'routes' => array(
        'home' => array(
            'type' => 'Literal',
            'options' => array(
                'route' => '/home',
                'defaults' => array(
                    'controller' => 'homeController',
                    'action' => 'index',
                )
            )
        )
    )
)

Для тех, кто не знаком с сегментами маршрутов. Они являются динамическими и передают сегменты URL в контроллер. Этот пример из учебника Zend Framework 2 Getting Started

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