我正在尝试在资源路由中传递参数。我的routes.php有:
$routes->resources('Products', [
'map' => [
'sku/:sku' => [
'action' => 'viewBySku',
'method' => 'GET',
]
]
]);
});
我的控制动作如下:
public function viewBySku($sku) {
die($sku);
}
执行路线后,控制器正在生成警告:
缺少viewBySku()的参数1
我错过了什么?
编辑:
我想为参数使用字母数字值。我发现的大多数答案都解释了如何仅传递整数。
答案 0 :(得分:0)
所以这就是我最终做的事情:
routes.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}'
]
]);