1

我目前有一个如下所示的 Segment 路由:/shop/:shopId/where shopIdhas no default value。

每当路由匹配时,Module.php 中的代码就会被触发,这会根据 进行一些准备shopId并将其保存在会话中。

我的问题是,如果有可能,在这一点上,将路由的默认值设置为那个shopId?最终目标是能够在不指定shopId从现在开始的每次时间的情况下组装 URL。

我记得在 ZF1 中这种行为是默认情况下,在组装 URL 时重用来自请求的匹配参数,并且您必须明确指定要删除它们。现在我需要相同的功能,但需要在一个Module.php级别上进行配置,而不必重写每个assemble()调用。

4

1 回答 1

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
        ));
    }
于 2013-06-25T17:40:00.970 回答