如何改变到下一条路线

时间:2015-11-21 15:08:49

标签: php laravel

两条路线

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,可能是"中间件"帮助我或其他方式

1 个答案:

答案 0 :(得分:2)

你不能,至少不能使用你当前的路线定义。那是因为{page}{city}对路由器而言意味着同样的事情。它们就像它们是{param}{param}一样,这意味着这两个路由定义在匹配时是相等的,并且它将始终与定义的第一个匹配,在您的情况下将始终调用PageController@show

您在路线定义中提供的名称只是为了帮助识别参数。例如,如果您要访问以下两个URL:

http://example.com/about
http://example.com/london

路由器不可能知道哪个是页面名称,哪个是城市,因为路由器aboutlondon是变量值,仅此而已。

相反,你应该找到一种区分两者的方法,例如:

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

您可以在Laravel Routing Documentation

中详细了解该主题