Laravel路由 - 将URL仅缩短到一个URI段。

时间:2014-08-06 07:12:35

标签: laravel laravel-4 routing url-routing

据说URL更短,seo更好(至少我的客户相信它)。

现在正在laravel中创建类似于watchtown.co.uk的网站。我需要以这样的方式生成uri不应该超过一个段。

要求

我有以下网址:

1.需要改变来自:

localhost/laravelproj/public/brands/brandname/watches

localhost/laravelproj/public/brandname-watches.html

2.需要改变来自:

localhost/laravelproj/public/brands/brandname/jewellery

localhost/laravelproj/public/brandname-jewellery.html

3.需要改变来自:

localhost/laravelproj/public/categories/categoryname/watches

localhost/laravelproj/public/categoryname-watches.html

4.需要改变来自:

localhost/laravelproj/public/categories/categoryname/jewellery

localhost/laravelproj/public/categoryname-jewellery.html

5.需要改变来自:

localhost/laravelproj/public/products/productname

localhost/laravelproj/public/productname-watches.html

我希望你理解这种模式。 我可以看到watchtown.co.uk完全相同(或者是其他任何方式?)

我在控制器中为品牌创建了这个功能:

    public function showProductListingByBrands($brandSlug) {

    $brand = Brand::findBySlug($brandSlug)->first();
    $products = "";
    if($brand){
        $products = $brand->products()->paginate(Misc::getSetting('paginate'));
    }
    $products = Product::findBySlug($brandSlug);
    return View::make('store');
}

现在我如何操纵它作为我的要求?我是laravel的新人。

提前致谢。

1 个答案:

答案 0 :(得分:1)

只是给你一个简短的想法。

在路线页面

Route::get('/{product_name}/', array(
    'as'   => 'product_page',
    'uses' => 'ProductPage@getProduct'
));

正如您所看到的那样,当用户访问

这样的页面时

示例:www.website.com/watch

它将使用ProductPage的方法转到控制器getProduct,因此变量{product_name}将在控制器上传递。

控制器

public function getProduct($product_name = false) {

    $product = Products::where('product_name', '=', $product_name);

    // Do check product existing record
    if ($product->count() == 0) {
        return  Redirect::route('some-page-error')
                ->with('failure', 'The hell are you doing?');
    } else {
        $product = $product->first();
        return  View::make('product_page')
                ->with('product_name', $product);
    }
}

因此,在方法getProduct上,参数$product_namewatch

因此,该方法将检查产品是否存在,如果不存在,用户将被重定向到404页面。

如果没有,它将被重定向到您已经制作的模板,然后传递所有产品数据并在那里显示。

但如果你将Route放入/product/{product_name}会很好,如果它的产品ID而不是产品名称也会很好,因为产品名称可能会变得多余。

所以是的。

编辑

我不知道你要做什么以及为什么它必须是.html,但是嗯...只是想给你一个主意。好吧,我不知道我的答案是否是一个好方法,有人可能会给出比我更好的答案。