Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to pass default values to controller by routing in Laravel 5?

Tags:

laravel

routes

In laravel, if I want to pass parameters to a controller in my route file

Route::get('user/sk/{id}'  , 'UsersController@findsk');

If I want to pass default parameters:

Route::get('user/{name?}', function ($name = 'John') {

     // how do I invoke my controller here?

     return $name;

});

How do I merge the two things? Is there a shortcut?

Route::get('user/sk/{id}'  , 'UsersController@findsk'

   // can I add an array of default parameters here?

);
like image 284
koalaok Avatar asked Mar 16 '23 04:03

koalaok


2 Answers

As far as I know, there is no shortcut, unfortunately.

To inject one optional parameter:

Route::get('user/{name?}', function ($name = 'John') {
    $ctrl = new \App\Http\Controllers\UsersController();
    return $ctrl->findsk($name);
});

To inject one optional parameter with more parameters:
Assuming you had an $id param and that UsersController@findsk accepts $id and $name.

Route::get('user/{id}/{name?}', function ($id, $name = 'John') {
    $ctrl = new \App\Http\Controllers\UsersController();
    return $ctrl->findsk($id, $name);
});

To inject something in the controller from the router:
Assuming want to use a url as a switch.

Route::get('my-special-url', function () {
    $ctrl = new \App\Http\Controllers\UsersController();
    return $ctrl->findsk(1, 'Paul');
});
like image 189
borracciaBlu Avatar answered Mar 24 '23 21:03

borracciaBlu


You can pass as a default parameter to function in your controller like just normal function

Route::get('user/sk/{id}'  , 'UsersController@findsk');

in UsersController

function findsk($id ='myVal'){

}
like image 37
StateLess Avatar answered Mar 24 '23 22:03

StateLess