通过参数值限制对路由的访问

Limit access to route by parameter value

我有如下路线:

Route::group([
    'prefix'    => 'reports'
], function () {
     Route::get('/points/{product_name}', ['uses' => 'MyController@get'])->where('product_name', ['product1', 'product2','product3'])
});

所以我想限制对产品名称为 product1product2product3 的端点 ID 的访问。但是对于 where 子句,我只能看到使用正则表达式或单个值进行检查。

当我使用像 ['product1', 'product2', 'product3'] 这样的数组时,它会抛出错误 "message": "Routing requirement for "product_name" must be a string."

我该如何解决这个问题?

您可以发送 implode(); and to receive using explode();

发送示例:

$array_send = ['product1', 'product2', 'product3'];
$imp_send = implode(",", $aray_send);
// return: product1,product2,produtct3

接收示例:

$array_receive = explode(',', '$product_name');
// return again array

对于 laravel 中的路线,您可以这样使用它:

where('product_name', 'product1|product2|product3'])

或数组:

where('product_name', implode("|", ['product1', 'product2','product3']))

根据 laravel docs,您可以在路由实例上使用 where 方法来限制路由参数的格式。 where 方法接受参数的名称和定义如何约束参数的正则表达式。所以你应该这样做:

$allowedParams = implode('|',['product1','product2','product3']);
// it will return you a string as 'product1|product2|product3'
Route::get('/points/{product_name}', ['uses' => 'MyController@get'])
           ->where('product_name', $allowedParams);