Laravel排除路线

时间:2016-12-08 15:43:06

标签: php laravel-5

我在web.php(Laravel 5.3)

中有这个
 Route::get('/{perfil}/{seccion}', 'HotelsController@index')->where(['perfil' => '(perfil|profile)'])->where(['seccion' => '(mis-hoteles|my-properties)']);
 Route::get('/{perfil}/{seccion}', 'PerfilController@index')->where(['perfil' => '(perfil|profile)']);

我希望第一条路线提供网址/perfil/mis-hoteles/profile/my-properties。并且第二条路线将为/perfil/[whatever]/profile/[whatever]提供网址。

它不起作用,/perfil/mis-hoteles被第二条路线重定向。

我也试过像

这样的东西
Route::get('/{perfil}/{seccion}', 'PerfilController@index')->where(['perfil' => '(perfil|profile)','seccion' => '^(!mis\-hoteles$)'])

表示第二条路线,但不起作用。

我做错了什么? 奇怪的是,如果我删除第二条路线而只留下

 Route::get('/{perfil}/{seccion}', 'HotelsController@index')->where(['perfil' => '(perfil|profile)'])->where(['seccion' => '(mis-hoteles|my-properties)']);

它有效,所以有一个匹配。为什么如果匹配laravel继续寻找找到第二条路线的匹配?

1 个答案:

答案 0 :(得分:0)

当您的路线具有相同的方法 uri sring 时,Laravel不喜欢它。如果您有两条路线使用相同的方法 uri字符串(而不是它们将收到的实际uris),那么它只会覆盖它。

所以我们需要"欺骗" 它。

而不是:

Route::get('/{perfil}/{seccion}', 'HotelsController@index')->where(['perfil' => '(perfil|profile)'])->where(['seccion' => '(mis-hoteles|my-properties)']);
Route::get('/{perfil}/{seccion}', 'PerfilController@index')->where(['perfil' => '(perfil|profile)']);

我们将"谎言" 并说:

Route::get('/{perfil}/{seccion}', 'HotelsController@index')->where(['perfil' => '(perfil|profile)'])->where(['seccion' => '(mis-hoteles|my-properties)']);
Route::get('/{perfil}/{section}', 'PerfilController@index')->where(['perfil' => '(perfil|profile)']);

请注意{perfil}/{seccion}{perfil}/{section}这封信只会告诉Laravel我们不想覆盖旧路线。

  

不要忘记分别更改控制器中的接受参数。

希望这能解决你的问题,它确实适合我。