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

时间:2019-02-28 10:00:05

标签: php laravel routing laravel-routing

我的路线如下:

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

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

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

我该如何解决?

3 个答案:

答案 0 :(得分:2)

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

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

或蒙山数组:

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

答案 1 :(得分:2)

根据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);

答案 2 :(得分:0)

您可以使用implode();发送,也可以使用explode();接收

发送示例:

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

接收示例:

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