2013-06-25 2 views
0

В настоящее время у меня сегментный маршрут выглядит так: /shop/:shopId/ где shopId не имеет значения по умолчанию.Inject значение по умолчанию в ZF2 Router

Всякий раз, когда маршрут согласован, запускается код в модуле Module.php, который будет выполнять некоторую подготовку в соответствии с shopId и сохранять его в сеансе, например.

Мой вопрос в том, можно ли в этот момент установить значение по умолчанию для этого маршрута shopId? Конечная цель - собрать URL-адреса без указания shopId каждый раз с этого момента.

Я помню, что в ZF1 это поведение было по умолчанию, когда согласованные параметры из запроса были повторно использованы при сборке URL-адреса, и вам нужно было явно указать, что вы хотели их удалить. Теперь мне нужна такая же функциональность, но настроена на уровне Module.php, вместо того, чтобы переписывать каждый звонок assemble().

ответ

1

Вариант один: от вашего indexAction

$id = $routeMatch->getParam('id', false); 
if (!$id) 
    $id = 1; // id was not supplied set default one note this can be added as constant or from db .... 

Вариант два: установить маршрут в module.config.php

'product-view' => array(
       'type' => 'Literal', 
       'options' => array(
        'route' => '/product/view', 
        'defaults' => array(
         'controller' => 'product-view-controller', 
         'action'  => 'index', 
        ), 
       ), 
       'may_terminate' => true, 
       'child_routes' => array(
        'default' => array(
         'type' => 'Segment', 
         'options' => array(
          'route' => '[/:cat][/]', 
          'constraints' => array(
           'cat'  => '[a-zA-Z][a-zA-Z0-9_-]*', 
          ), 
          'defaults' => array(
          ), 
         ), 
        ), 
       ), 
      ), 

в вас контроллер:

public function indexAction() 
    { 
     // get category param 
     $categoryParam = $this->params()->fromRoute('cat'); 
     // if !cat then get random category 
     $categoryParam = ($categoryParam) ? $categoryParam : $this->categories[array_rand($this->categories)]; 
     $shortList = $this->listingsTable->getListingsByCategory($categoryParam); 
     return new ViewModel(array(
      'shortList' => $shortList, 
      'categoryParam' => $categoryParam 
     )); 
    }