据说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的新人。
提前致谢。
答案 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_name
为watch
因此,该方法将检查产品是否存在,如果不存在,用户将被重定向到404页面。
如果没有,它将被重定向到您已经制作的模板,然后传递所有产品数据并在那里显示。
但如果你将Route放入/product/{product_name}
会很好,如果它的产品ID而不是产品名称也会很好,因为产品名称可能会变得多余。
所以是的。
编辑
我不知道你要做什么以及为什么它必须是.html,但是嗯...只是想给你一个主意。好吧,我不知道我的答案是否是一个好方法,有人可能会给出比我更好的答案。