Маршрут Laravel 4 с неограниченным количеством параметров

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

Вот мой текущий маршрут

Route::get('{pageLink}', array('uses' => 'SiteController@getPage')); 

Это работает на первом уровне. Таким образом, URL-адрес, например something.com/foo/, будет работать. Но если бы у меня было что-то вроде something.com/foo/bar/, это не поймало бы этот URL. Мне нужно, чтобы он соответствовал неограниченным уровням. Таким образом, в моем контроллере он получит переменную от всей ссылки.

Я знаю, что могу

 Route::get('{pageLink}', array('uses' => 'SiteController@getPage')); Route::get('{pageLink}/{pageLink2}', array('uses' => 'SiteController@getPage')); Route::get('{pageLink}/{pageLink2}/{pageLink3}', array('uses' => 'SiteController@getPage')); 

Но это просто кажется излишним. Есть ли лучший способ сделать это, чтобы он соответствовал концу URL-адреса?

Благодарю.

Вы можете попробовать что-то вроде этого:

 //routes.php Route::get('{pageLink}/{otherLinks?}', 'SiteController@getPage')->where('otherLinks', '(.*)'); 

Не забудьте поставить выше в самом конце (внизу) файла route.php, поскольку это похоже на маршрут «поймать все», поэтому сначала нужно определить все «более конкретные» маршруты.

 //controller class SiteController extends BaseController { public function getPage($pageLink, $otherLinks = null) { if($otherLinks) { $otherLinks = explode('/', $otherLinks); //do stuff } } } 

Этот подход должен позволить вам использовать неограниченное количество параметров, так что это то, что вам кажется нужным.

@Fusion https://laravel.com/docs/5.4/routing

Вы можете ограничить формат параметров маршрута, используя метод where на экземпляре маршрута. Метод where принимает имя параметра и регулярное выражение, определяющее, как должен ограничиваться параметр. поэтому {id} является параметром маршрута, а ->where('id', '[0-9]+') является выражением регулярного выражения для этого параметра. Если вам нужно использовать больше параметров, вы можете сделать что-то вроде этого:

 Route::get('user/{id}/{id2}', function ($id) { })->where('id', '[0-9]+')->where('id2', '[[0-9]+]'); Route::get('user/{id}', function ($id) { })->where('id', '[0-9]+');