【问题标题】:Laravel 5.2 route model bindingLaravel 5.2 路由模型绑定
【发布时间】:2016-06-04 13:26:15
【问题描述】:

Laravel 有一个关于路由模型绑定的文档,可以在 here 找到。但是没有关于这种情况的例子:

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

如何将模型隐式绑定到路由中?我知道我可以直接在控制器的方法上做这样的事情。

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

但我只是好奇如何在路线上做到这一点。

我喜欢这种方法

Route::get('search/{article}', function(ArticlesModel $articlesModel) {
    // this should be calling 'ArticleController@search'
});

谢谢!

【问题讨论】:

  • 当您可以像@Jeff 在他的回答中显示的那样拥有一个自动调用它的路由定义时,为什么还要从路由关闭中调用ArticleController@search
  • 如果您的模型是 ArticlesModel,请尝试将路线更新为“search/{ArticlesModel}”,然后当您执行 GET /search/1 时,它将尝试绑定 ID 为 1 的 ArticleModel
  • 好的,我更新了我的答案,但我同意@Bogdan,这样做根本没有意义。传递"ArticleController@search" 只是为你做这件事......

标签: php laravel laravel-5 laravel-routing laravel-5.2


【解决方案1】:

因为你的变量叫做$model,Laravel 会寻找写成{model} 的url 的通配符段:

在 routes.php 中:

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

在控制器中:

function search(Article $article) {
    //$article is the Article with the id from {article}, ie. articles/2 is article 2
}

编辑...您建议的方式实际上没有意义。这只是一个额外的步骤,只需使用"ArticleController@search" 就可以完全跳过。我认为这段代码会起作用,尽管我不推荐它:

Route::get('search/{article}', function(Article $article)
{
    $controller = App::make(ArticleController::class);
    return App::call([$controller, 'search'], compact('article'));
}

【讨论】:

  • 但是它将从 ArticleController 调用搜索方法的部分在哪里?
  • 我已经更新了我的问题,我正在采用某种方法。
  • 谢谢@Jeff。我只是想知道如何通过路由的回调返回控制器的方法。如果您的第一个给出的答案就足够了,那么我会去做。只是想知道方法或以防万一。
【解决方案2】:

routes.php

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

ArticleController.php

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

【讨论】:

  • 我已经更新了我的问题,我正在采用某种方法。
猜你喜欢
  • 2018-01-08
  • 2021-05-24
  • 1970-01-01
  • 2017-01-26
  • 2017-06-22
  • 1970-01-01
  • 1970-01-01
  • 2018-12-17
  • 2015-07-12
相关资源
最近更新 更多