Navi
Navi

Reputation: 151

How to make multi-level url structure in Laravel 4?

I am looking to create a URL structure like site.com/mycat/myorg/myexam/mysyllabus and site.com/mycat/myorg/myexam and so on for all params.

Currently I'm passing the params from URL to the function like:

Route::get('{cat}/{org}/{exam}/{syllabus}', 'homeController@myPage');

and my function looks like this:

public function myPage($cat, $org, $exam, $syllabus) {
    $result = myModel::where('syllabus_slug', $syllabus)->first();
    if(empty($result)) { App::abort(404); } 
    else
    return View::make('myPage', $result);
}

I think it would be very resource intensive to check for all url params at every request from the database. Currently i'm only checking the $syllabus param from database but this way any value of $org, $cat can be passed without any error. Ofcourse I can check for all params from database but i think that's not the right way to work with URLs with this awesome framework.

Update: I also want to make cat and org optional.

Upvotes: 0

Views: 705

Answers (1)

seeARMS
seeARMS

Reputation: 1690

Do you only have a set amount of categories, organizations, etc? If so, Laravel comes with something called Route Prefixing, where you can do something like this for each of the categories and organizations:

Route::group(array('prefix' => 'myCategory'), function()
{

    Route::group(array('prefix' => 'myOrg'), function()
    {

        Route::group(array('prefix' => 'myExam'), function()
        {
            Route::get('/', 'homeController@myPage');

        });

        Route::group(array('prefix' => 'myOtherExam'), function()
        {
            Route::get('/', 'homeController@myOtherPage');

        });
    });
});

Upvotes: 1

Related Questions