Reputation: 5064
Laravel has a documentation regarding route model binding which could be found here. But there is no example with regards to this kind of scenario:
Route::get('search/', 'ArticleController@search');
How to I implicitly bind a model into the route? I know I could do something like this directly on the controller's method.
public function search(Model $model) {
// some code here
}
But I'm just curious on how to do it on the routes instead.
I am after this approach
Route::get('search/{article}', function(ArticlesModel $articlesModel) {
// this should be calling 'ArticleController@search'
});
Thanks!
Upvotes: 0
Views: 920
Reputation: 25201
Because your variable is called $model
, Laravel will look for a wildcard segment of the url written as {model}
:
In routes.php:
Route::get('search/{article}', 'ArticleController@search');
In controller:
function search(Article $article) {
//$article is the Article with the id from {article}, ie. articles/2 is article 2
}
Edit... the way that you are suggesting doesn't really make sense. That would just be an extra step that is skipped entirely by just using "ArticleController@search"
. I think this code would function although I don't recommend it:
Route::get('search/{article}', function(Article $article)
{
$controller = App::make(ArticleController::class);
return App::call([$controller, 'search'], compact('article'));
}
Upvotes: 3
Reputation: 265
routes.php
Route::get('search/{article}', 'ArticleController@search');
ArticleController.php
public function search(Model $article) {
// some code here
}
Upvotes: 0