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



我正在尝试在资源路由中传递参数。我的路线.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}'
    ]
]);

最新更新