【发布时间】:2016-03-05 15:37:55
【问题描述】:
这个问题看起来很简单,但我想不通……你如何在 Laravel 5.1 中实现带有类别的基于 slug 的动态页面?
类似mywebsite.com/category/sub-category/my-page
我知道Route::get('/{slug}') 将“slug”作为标识符,但问题是该页面可能位于mywebsite.com/category/my-page,因此如果将路由设置为Route::get('/{category}/{subcategory}/{page}') 之类的内容,则第二个将不起作用例子。
我正在考虑制作 3 条路线,例如
Route::get('/{category}/{subcategory}/{page}')
Route::get('/{category}/{page}')
Route::get('/{page}')
然后控制器接收($category = null, $subcategory = null, $page = null)
在控制器中类似于
if (!$page)
$page = $subcategory;
if (!$page)
$page = $category;
是否有另一种更清洁的方法来实现这一目标?因为这里我们只有 2 个类别路线,但可能有 3 个、5 个或更多?
【问题讨论】:
-
这似乎是设计不佳的产物。如果您不需要类别和子类别来显示页面,请不要强迫您的用户浏览它。如果您不知何故被这些路由卡住,请使用
request()->page获取页面,而不是摸索函数参数。 -
我想知道您是否可以将
Route::controller与public function getSomePage(Request $request)之类的动态 方法一起使用,然后在$request->segments()上执行手动方法 - 不过没有尝试过,阅读the doc 可能会提供一些见解。 ps.route::controller虽然有一个预定义的参数,即。getSomePage($category, $slug)在route::list中仍显示为SomePage/{one?}/{two?}/.../{five?} -
@Ivan Milanovm ,如果使用
Route::get('/{page}')如何显示其他网址?例如/user或...不是page的网址。
标签: php laravel laravel-5.1