我已按以下方式配置路线:
Route::model('terms', 'Term');
Route::resource('terms', 'TermController');
Route::bind('terms', function($value, $route) {
return App\Term::whereId($value)->first();
});
这导致自动使用默认方法可用的术语模型:编辑,显示等......
请参阅下面的控制器代码片段:
public function update(Term $term) {
//update term
}
但是我想用几种新方法来扩展我的控制器。因此,当我导航到terms/{term}/review
时,$term
会自动注入我的控制器。有没有办法做到这一点?有些像下面的那样?
Route::get('terms/{term}/review', function (App\Term $term) {
use TermController@review;
});
答案 0 :(得分:1)
您为Route::bind
URI段定义了与terms
绑定的路由模块,因此无需在其他路由中再次指定。{p}至于附加路线,最好在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.
}