Laravel 4 route with unlimited number of parameters

laravel, laravel-4, laravel-routing, php

Solution

You can try something like this:

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

Remember to put the above on the very end (bottom) of routes.php file as it is like a 'catch all' route, so you have to have all the 'more specific' routes defined first.

//controller 
class SiteController extends BaseController {

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

}

This approach should let you use unlimited amount of params, so this is what you seem to need.

Problem

I'm trying to create a dynamic route for an unlimited number of URL levels. Here's my current route ``` Route::get('{pageLink}', array('uses' => 'SiteController@getPage')); ``` This works for the first level. So a URL like something.com/foo/ would work. But if I had something like something.com/foo/bar/ it wouldn't catch that URL. I need it to match unlimited levels. That way in my controller it'll get me a variable of whatever the entire link is. I know I could do ``` Route::get('{pageLink}', array('uses' => 'SiteController@getPage')); Route::get('{pageLink}/{pageLink2}', array('uses' => 'SiteController@getPage')); Route::get('{pageLink}/{pageLink2}/{pageLink3}', array('uses' => 'SiteController@getPage')); ``` But that just seems like an overkill. Is there a better way to do this so it'll match to the end of the URL? Thanks.

Original source