我正在尝试在资源路由中传递参数。我的路线.php有:
$routes->resources('Products', [
'map' => [
'sku/:sku' => [
'action' => 'viewBySku',
'method' => 'GET',
]
]
]);
});
我的控制操作如下:
public function viewBySku($sku) {
die($sku);
}
执行路由后,控制器生成警告:
缺少 viewBySku() 的参数 1
我错过了什么?
编辑:
我想为参数使用字母数字值。我找到的大多数答案都是解释如何只传递整数。
这就是我最终所做的:
路线.php
$routes->resources('Products', [
'map' => [
'sku/:sku' => [
'action' => 'viewBySku',
'method' => 'GET',
]
]
]);
控制器
public function viewBySku() {
if (!$sku = $this->request->param('sku')) {
throw new BadRequestException("Sku is missing");
}
die($sku);
}
显然,我的变量正在传递给路由器,而不是控制器的操作。
<小时 />其他解决方案
因此,在查看资源路由后,我发现您可以将连接选项传递给它:
$routes->resources('Products', [
'map' => [
'sku/:sku' => [
'action' => 'viewBySku',
'method' => 'GET',
]
],
'connectOptions' => [
'sku' => '[a-zA-Z0-9-]{2,10}',
'pass' => ['sku', 'id']
]
]);
如果要将字母数字值传递给 id 参数,还可以修改 id 的正则表达式:
$routes->resources('Products', [
'connectOptions' => [
'id' => '[a-zA-Z0-9-]{2,10}'
]
]);