具有可选参数的Laravel 5.2路由

时间:2017-10-25 03:41:07

标签: php laravel laravel-5.2

我正在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,只是在商店之后使用*然后我可以传递任何内容。

如果您需要任何其他信息,请与我们联系。我感谢任何帮助。

2 个答案:

答案 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 -_] +)/?)+ 正则表达式以涵盖所有情况,因为这是我添加的内容快速测试你的例子