通过参数值限制对路由的访问
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'])
});
所以我想限制对产品名称为 product1
、product2
、product3
的端点 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);
我有如下路线:
Route::group([
'prefix' => 'reports'
], function () {
Route::get('/points/{product_name}', ['uses' => 'MyController@get'])->where('product_name', ['product1', 'product2','product3'])
});
所以我想限制对产品名称为 product1
、product2
、product3
的端点 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);