1. 将路由中的变量添加到请求对象中,默认laravel的请求对象中不包含路由中的变量,我们重写all()方法即可
/** * @return array */ public function rules(){ return [ 'slug' => 'required|exists:articles,slug', ]; } /** * Add parameters to be validated * * @return array */ public function all(){ return array_replace_recursive( parent::all(), $this->route()->parameters() ); }
2. 使用路由-模型绑定
Route::bind('article_slug', function ($slug) { return Article::published()->whereSlug($slug)->firstOrFail(); }); Route::get('articles/{article_slug}', 'ArticleController@show');
匹配的Article实例将会传递给控制器
class ArticleController extends Controller{ public function show(Article $article){ return view('article.show', compact('article')); } }