我在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继续寻找找到第二条路线的匹配?
答案 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我们不想覆盖旧路线。
不要忘记分别更改控制器中的接受参数。
希望这能解决你的问题,它确实适合我。