我目前的分段路线如下所示:/shop/:shopId/
其中shopId
没有默认值。
每当匹配路由时,触发Module.php中的代码,根据shopId
进行一些准备,并将其保存在会话中。
我的问题是,如果有可能,那么,将路由的默认值设置为shopId
?最终目标是能够在此时不再指定shopId
来组合URL。
我记得在ZF1中这种行为是默认的,其中来自Request的匹配的params在组装URL时被重用,你必须明确指定你想要删除它们。现在我需要相同的功能,但是在Module.php
级别配置,而不是必须重写每个assemble()
次呼叫。
答案 0 :(得分: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
));
}