首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Laravel 4.2和URLS

Laravel 4.2和URLS
EN

Stack Overflow用户
提问于 2016-03-24 01:16:21
回答 2查看 218关注 0票数 1

我将有如下所示的url

代码语言:javascript
复制
      whatever.com/products/accessories/1
      whatever.com/products/amplifiers/2
      whatever.com/products/speakers/3

我到处阅读和搜索,但我想不出如何用一条路线来处理:

如果我做下面的事情

代码语言:javascript
复制
      whatever.com/products/1
      whatever.com/products/2
      whatever.com/products/3

我可以使用下列路线:

代码语言:javascript
复制
    Route::model('product', 'Product');

    Route::get('products/{product}', function(Product $product)
    {
        return View::make('product', array('product' => $product->toArray()));
    });

但是这并不是非常友好的urls。

提前感谢

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-03-24 03:11:17

为了强制执行中间参数并使其有意义,在构建传递的最终ID的同时,您可以使用路由模型绑定和一个解析器函数。传递给解析器函数的第二个参数是Illuminate\Routing\Route的一个实例,如果您检查它的API接口,您将看到它有一个parameter()方法,它允许您获取路由中任何参数的值。这使您可以访问这两个参数并从中构建查询。

代码语言:javascript
复制
Route::bind('product', function($value, $route){
    $category = $route->parameter('category');
    $product = Product::where(['id' => $value, 'category' => $category])->first();
    return $product ?: 'Not found';
});

Route::get('products/{category}/{product}', function($category, $product)
{
    return View::make('product', array('product' => $product->toArray()));
});

注意,如果没有结果,我将返回一个字符串,该字符串表示'Not found',但您可以返回任何内容。这允许您强制执行这个中间参数实际上是有意义的,这样whatever.com/products/amplifiers/2将返回一个实际的结果,而whatever.com/products/fake/2则不会。

票数 0
EN

Stack Overflow用户

发布于 2016-03-24 02:49:03

经过几个小时的搜索,我找到了以下解决方案

Route::get('products/{p1?}/{p2?}/{p3?}/{p4?}','ProductController@index');

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36191617

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档