Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to use laravel routing for unknown number of parameters in URL?

For example, I'm publishing books with chapters, topics, articles:

http://domain.com/book/chapter/topic/article

I would have Laravel route with parameters:

Route::get('/{book}/{chapter}/{topic}/{article}', 'controller@func')

Is it possible, in Laravel, to have a single rule which caters for an unknown number of levels in the book structure (similar to this question)? This would mean where there are sub-articles, sub-sub-articles, etc..

like image 935
greener Avatar asked Jul 28 '15 16:07

greener


1 Answers

What you need are optional routing parameters:

//in routes.php
Route::get('/{book?}/{chapter?}/{topic?}/{article?}', 'controller@func');

//in your controller
public function func($book = null, $chapter = null, $topic = null, $article = null) {
  ...
}

See the docs for more info: http://laravel.com/docs/5.0/routing#route-parameters

UPDATE:

If you want to have unlimited number of parameters after articles, you can do the following:

//in routes.php
Route::get('/{book?}/{chapter?}/{topic?}/{article?}/{sublevels?}', 'controller@func')->where('sublevels', '.*');

//in your controller
public function func($book = null, $chapter = null, $topic = null, $article = null, $sublevels = null) {
  //this will give you the array of sublevels
  if (!empty($sublevels) $sublevels = explode('/', $sublevels);
  ...
}
like image 189
jedrzej.kurylo Avatar answered Sep 23 '22 18:09

jedrzej.kurylo