有趣的Laravel路由网址问题

时间:2016-07-08 06:15:44

标签: laravel url

我(对我而言)是一个有趣的网址问题。

这是我的情况。我有一个用户填充的数据库,所以我不能确定我将拥有多少个子区域。

我将始终有一个区域,一个或更多子区域,以及一个结束我的网址的位置。

示例:/ area / subarea1 / subarea2 / location

这稍微简化了我的需要。我需要能够为以下网址提供服务;

/面积/ subarea1 /位置

/面积/ subarea1 / subarea2 / subarea3 /位置)

我的路线看起来像这样:

Route::get('area/{subarea1}', 'SubareaController@show');
Route::get('area/{subarea1}/{location}', 'LocationController@show');
Route::get('area/{subarea1}/{subarea2}', 'SubareaController@show2');
Route::get('area/{subarea1}/{subarea2}/{location}', 'LocationController@show2');

所以这里的问题是我的路线相互重叠,因为它们基本相同。

我的问题是这个。当它们具有相同的url结构时,有没有办法区分这些路由?如果没有,是否有更好的方法来处理区域和位置之间的多个子区域?

修改

好的我已经尝试命名我的路由,但我似乎无法正确使用命名路由和视图中的所有参数。我可以查看区域/ {subarea1} / subarea1 / {subarea2} / subarea2解决方案,即使我不想拥有更长的网址。

1 个答案:

答案 0 :(得分:2)

这是因为Laravel无法将每条路线与另一条路线区分开来。例如,它会将这两个网址路由到同一个操作:

example.com/area/my-subarea-1/my-location
example.com/area/my-subarea-1/my-subarea-2

所以你需要不同的路径。试试这个:

Route::get('area/subarea1/{subarea1}', 'SubareaController@show');
Route::get('area/subarea1/{subarea1}/location/{location}', 'LocationController@show');
Route::get('area/subarea1/{subarea1}/subarea2/{subarea2}', 'SubareaController@show2');
Route::get('area/subarea1/{subarea1}/subarea2/{subarea2}/location/{location}', 'LocationController@show2');