Laravel 5.2 route model binding

◇◆丶佛笑我妖孽 提交于 2019-12-11 23:35:26

问题


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!


回答1:


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'));
}



回答2:


routes.php

Route::get('search/{article}', 'ArticleController@search');

ArticleController.php

public function search(Model $article) {
    // some code here
}


来源:https://stackoverflow.com/questions/35565170/laravel-5-2-route-model-binding

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!