两条路线
Route::get('{page}', ['uses' => 'PageController@show']);
Route::get('{city}', ['uses' => 'CityController@show']);
路线模型绑定
$router->bind('page', function($key, $binder) {
return Page::firstByUrl($key);
});
$router->bind('city', function($key, $binder) {
return City::firstByUrl($key);
});
如果没有找到Page模型,如何调用(输入)CityController(并调用city bind)? 总是只调用PageController,可能是"中间件"帮助我或其他方式
答案 0 :(得分:2)
你不能,至少不能使用你当前的路线定义。那是因为{page}
和{city}
对路由器而言意味着同样的事情。它们就像它们是{param}
和{param}
一样,这意味着这两个路由定义在匹配时是相等的,并且它将始终与定义的第一个匹配,在您的情况下将始终调用PageController@show
。
您在路线定义中提供的名称只是为了帮助您识别参数。例如,如果您要访问以下两个URL:
http://example.com/about
http://example.com/london
路由器不可能知道哪个是页面名称,哪个是城市,因为路由器about
和london
是变量值,仅此而已。
相反,你应该找到一种区分两者的方法,例如:
Route::get('pages/{page}', ['uses' => 'PageController@show']);
Route::get('cities/{city}', ['uses' => 'CityController@show']);
现在路由器知道在pages
出现页面名称后cities
出现城市名称后,以下内容将正常运行:
http://example.com/pages/about
http://example.com/cities/london
中详细了解该主题