我正在Laravel 5.2中创建一个简单的产品搜索引擎。即使我需要做一些后端处理,然后将漂亮的URL传递给另一种显示产品的方法,我也可以使用get或post,以满足我的需求为准。
我的参数是 - 查询 - 商人 - 牌 - 页面 - 排序
所有这些参数都可以单独使用或单独使用。 如果可能的话,我想要使用漂亮的URL。
基本上我希望网址看起来像这样:
/shop/query/shoes
/shop/query/shoes/brand/nike
/shop/query/sort/price
/shop/merchant/amazon
这5个参数可以形成许多不同的路径,但它们都是可选的。那么,如果没有为每一条可能的路线编码,那么使这条路线成为我想要的最佳解决方案是什么。
我确定我忽视了一些事情。我之前使用过Zend Framework,只是在商店之后使用*然后我可以传递任何内容。
如果您需要任何其他信息,请与我们联系。我感谢任何帮助。
答案 0 :(得分:0)
在我看来,这种方法不是最佳解决方案。
/category/{category}
点应显示属于{category}
的所有项目
您可以使用/category/{category}/brand/{brand}
端点来显示特定品牌的商品,然后如果您想对它们进行排序或过滤它们,您可以添加一些网址参数(例如价格)。
因此,如果我想以最高价格订购,您可以使用:/category/shoes/brand/nike?sort-by=price&mode=DESC
。在此示例中,类别为shoes
,品牌为nike
,然后您会收到过滤器(按价格和DESC),这样您就可以获取这些商品并将其订购然后返回到视图中。
如果您只想执行搜索栏以返回数据,可以简单地使用唯一的点/search
并为您拥有的每种过滤器传递网址参数:/search?category=shoes&brand=nike&sort-by=price&sort-type=DESC
,然后在您的当用户对任何项目进行clic时,您可以将它们重定向到该项目的正确端点:
/category/{category}/brand/{brand}/model/{model}
/category/shoes/brand/adidas/model/adidas-hypervenom
答案 1 :(得分:0)
尝试这样的事情
Route::get('shop/{params?}', function(Request $request, $params = '') {
// everything after "shop/" will be in $params
// you need to add custom logic to parse and handle $params string
return $params;
})->where('params', '(([a-zA-Z0-9-_]+)\/?)+');
{params?} 是Optional Parameter
有时您可能需要指定路由参数,但可以选择存在该路由参数。您可以通过放置一个?在参数名称后面标记。确保将路径的相应变量设为默认值
- >其中('params',...) 是Regular Expression Constraint
您可以使用路由实例上的where方法约束路由参数的格式。 where方法接受参数的名称和定义参数应如何约束的正则表达式
注意强>
请务必调整(([a-zA-Z0-9 -_] +)/?)+ 正则表达式以涵盖所有情况,因为这是我添加的内容快速测试你的例子