CakePHP 3将字母数字参数传递给资源路由

时间:2017-01-10 23:11:48

标签: cakephp-3.0

我正在尝试在资源路由中传递参数。我的routes.php有:

 $routes->resources('Products', [
        'map' => [
            'sku/:sku' => [
                'action' => 'viewBySku',
                'method' => 'GET',
            ]
        ]
        ]);
 });

我的控制动作如下:

public function viewBySku($sku) {
    die($sku);
}

执行路线后,控制器正在生成警告:

  

缺少viewBySku()的参数1

我错过了什么?

编辑:

我想为参数使用字母数字值。我发现的大多数答案都解释了如何仅传递整数。

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}'
    ]
]);