Ограничить доступ к маршруту по значению параметра - PullRequest
0 голосов
/ 28 февраля 2019

У меня есть маршрут, подобный следующему:

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

Поэтому я хотел бы ограничить доступ к этой конечной точке, если имя продукта - product1, product2, product3.Но с предложением where я вижу только проверку с регулярным выражением или одним значением.

Когда я использую массив типа ['product1', 'product2', 'product3'], но он выдает ошибку "message": "Routing requirement for "product_name" must be a string."

Как я могу решить эту проблему?

Ответы [ 3 ]

0 голосов
/ 28 февраля 2019

Для маршрутов в laravel вы можете использовать его следующим образом:

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

или с массивом:

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

0 голосов
/ 28 февраля 2019

Согласно документам laravel Вы можете ограничить формат параметров вашего маршрута, используя метод 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);
0 голосов
/ 28 февраля 2019

Вы можете отправить с implode(); и получить с помощью explode();

Пример отправки:

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

Пример получения:

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