我在module.config.php
中配置了一条路线来处理两个参数,
这里是文件module.config.php的内容,我只是定义了路由(相同的路由):
已更新:
'router' => array(
'routes' => array(
'Products' => array(
'type' => 'Zend\Mvc\Router\Http\Literal',
'options' => array(
'route' => '/application/admin/products[/:id]',
'defaults' => array(
'__NAMESPACE__' => 'Application\Controller',
'controller' => 'Admin',
'action' => 'index',
),
),
),
'productsList' => array(
'type' => 'segment',
'options' => array(
'route' => '/application/products/productsList[/:type][/:id]',
'defaults' => array(
'__NAMESPACE__' => 'Application\Controller',
'controller' => 'Products',
'action' => 'productsList'
),
),
),
'Emplacement' => array(
'type' => 'segment',
'options' => array(
'route' => '/application/support/listeEmplacementsSupport[/:pkSupport]',
'defaults' => array(
'__NAMESPACE__' => 'Application\Controller',
'controller' => 'Support',
'action' => 'listeEmplacementsSupport',
),
),
),
'application' => array(
'type' => 'Literal',
'options' => array(
'route' => '/application',
'defaults' => array(
'__NAMESPACE__' => 'Application\Controller',
'controller' => 'Index',
'action' => 'index',
),
),
'may_terminate' => true,
'child_routes' => array(
'default' => array(
'type' => 'Segment',
'options' => array(
'route' => '/[:controller[/:action[/:id][/:dr]]]',
'constraints' => array(
'controller' => '[a-zA-Z][a-zA-Z0-9_-]*',
'action' => '[a-zA-Z][a-zA-Z0-9_-]*',
),
'defaults' => array(
),
),
),
),
),
),
),
我使用以下
在视图中构建链接<a href="/application/products/productsList/mandan/<?php echo $coreg['idProduct']; ?>" >
<img height='20' src="/img/mail-recevoir-32.png" alt='products' />
</a>
要使用一个参数
$param = $this->params('id');
答案 0 :(得分:0)
路线以'Last in first out' LIFO顺序匹配。
The relevant section of the documentation states:
通常,应该以LIFO顺序查询路由,因此名称为RouteStack的原因。 [...]您需要确保注册可能重叠的路线,以便最具体的匹配首先匹配(即稍后注册)
因此,根据您当前的配置,因为所有路由都在顶层注册,所以最后一条路由(application/default
)正在被检查,然后在productList
给定之前首先匹配机会。
另外,因为application/default
将可选的id
参数定义为第一个参数,这是您在使用type
时获得$this->params('id')
参数值的原因。
<强> Soultion 强>
最简单的解决方案就是重新排序路线;将application
路线右移到定义的顶部应该有效。
订单应如下
'router' => array(
'routes' => array(
'application' => array(
// .. same
'child_routes' => array(
'default' => array(
// .. Same
),
),
),
'Products' => array(
// ..same
),
'productsList' => array(
// ..same
),
'Emplacement' => array(
// ..config
),
),
),
你可以选择给每条路线一个优先级,不管顺序如何,但是我认为将它们保持在自然顺序以保存未来的混淆会更有意义。
我在这里
我在评论中提到您错误地使用了Literal
路线而不是Segment
。 Products
路由定义存在同样的问题。如果路线是文字的,则只会匹配完全值(因此您需要在网址中使用/[:id]
)。
/application/admin/products[/:id]
因此,您还需要将此路线更新为segment
,以便将产品ID视为参数。
最后,使用URL view helper可以更轻松地在视图中构建网址。您的视图脚本代码将更改为
<?php
$type = 'mandan';
$id = $coreg['idProduct'];
?>
<a href="<?php echo $this->url('productsList', compact('type', 'id')); ?>">
<img height='20' src="/img/mail-recevoir-32.png" alt='products' />
</a>