【问题标题】:Laravel 5.2 Route Model Binding using methods and controllerLaravel 5.2 使用方法和控制器的路由模型绑定
【发布时间】:2017-01-26 19:30:35
【问题描述】:

我已经通过以下方式配置了我的路线:

Route::model('terms', 'Term');
Route::resource('terms', 'TermController');
Route::bind('terms', function($value, $route) {
    return App\Term::whereId($value)->first();
});

这导致使用默认方法自动使用术语模型:编辑、显示等...

请参阅下面来自我的控制器的代码 sn-p:

public function update(Term $term) {
 //update term
}

但是我想用几个新方法来扩展我的控制器。因此,当我导航到 terms/{term}/review 时,$term 会自动注入到我的控制器中。有没有办法做到这一点?像下面这样的?

Route::get('terms/{term}/review', function (App\Term $term) {
   use TermController@review;
});

【问题讨论】:

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


    【解决方案1】:

    您为terms URI 段定义了与Route::bind 绑定的路由模块,因此无需在附加路由中再次指定。至于附加路由,最好在Route::resource之前定义(见supplementing a resource controller)。

    您可以像这样写出您的路线

    // Additional resource routes should be called before Resource::resource
    Route::get('terms/{terms}/review', 'TermController@showReview');
    
    // Init resource controller
    Route::resource('terms', 'TermController');
    
    // URI binding resolution for 'terms'
    Route::bind('terms', function($value) {
        return App\Term::whereId($value)->first();
    });
    

    然后将附加方法添加到您的资源控制器

    public function showReview(\App\Term $term)
    {
        dd($term); // $term is an instance of your App\Term.
    }
    

    【讨论】:

      猜你喜欢
      • 2016-06-04
      • 2018-09-15
      • 1970-01-01
      • 2018-01-16
      • 2018-01-08
      • 2021-03-15
      • 1970-01-01
      • 1970-01-01
      • 2021-05-24
      相关资源
      最近更新 更多