Oliver Williams
Oliver Williams

Reputation: 6334

Laravel Routes and 'Class@Method' notation - how to pass parameters in URL to method

I am new to Laravel so am uncertain of the notation. The Laravel documentation shows you can pass a parameter this way:

Route::get('user/{id}', function ($id) {
    return 'User '.$id;
});

Which is very intuitive. Here is some existing coding in a project I'm undertaking, found in routes.php:

Route::get('geolocate', 'Api\CountriesController@geolocate');
# which of course will call geolocate() in that class

And here is the code I want to pass a variable to:

Route::get('feed/{identifier}', 'Api\FeedController@feed');

The question being, how do I pass $identifier to the class as:

feed($identifier)

Thanks!

Also one further sequitir question from this, how would I notate {identifier} so that it is optional, i.e. simply /feed/ would match this route?

Upvotes: 1

Views: 1856

Answers (1)

edcs
edcs

Reputation: 3879

You should first create a link which looks like:

/feed/123

Then, in your controller the method would look like this:

feed($identifier)
{
    // Do something with $identifier
}

Laravel is smart enough to map router parameters to controller method arguments, which is nice!

Alternatively, you could use the Request object to return the identifier value like this:

feed()
{
    Request::get('identifier');
}

Both methods have their merits, I'd personally use the first example for grabbing one or two router parameters and the second example for when I need to do more complicated things.

Upvotes: 1

Related Questions