Как передать любое количество параметров в маршрутизации ci4?

Я пытаюсь найти решение для передачи любого количества параметров с использованием маршрута.

Например, если мой маршрут

$routes->get('pages/section/widgets/(:num)/(:num)/(:num)', 'Section::widgets/$1/$2/$3');

Здесь я должен быстро объявить количество параметров, которые я передаю, т.е. 3.

Но если я не уверен в количестве параметров, то как я могу передать это в ci4? Я просмотрел документацию и испробовал все возможные заполнители. Но это не сработает, как ожидалось.

Для большей ясности в Laravel мы используем -

Route::get('/{page?}', 'Frontend\HomeController@inside')->where('page', '.*');

Таким образом, в laravel он принимает все параметры и перенаправляет их на соответствующий метод.

Заранее спасибо.


person Abhishek Honrao    schedule 20.07.2020    source источник


Ответы (1)


После некоторых исследований и изучения документации. Я придумал решение, что это невозможно с маршрутизацией. Мы можем добиться этого с помощью встроенной библиотеки URI class. Дополнительные сведения см. в документации.

Например, если у меня есть URL-адрес типа http://example.com/test1/test2/test3. Затем в маршрутах мы можем объявить как -

$routes->get('/(:any)', 'Home::index');

Но в контроллере -

$uri = service('uri');
print_r($uri->getSegments());//this will give you all the segments in array.

Итак, это напечатает -

Array ( [0] => test1 [1] => test2 [2] => test3 )

Спасибо.

person Abhishek Honrao    schedule 21.07.2020