Laravel路由为SEO路径/表的标题

时间:2014-08-30 09:47:25

标签: laravel routing seo laravel-routing

我需要解决我的问题

通常人们会像mylaravelsite / products / {id}一样制作网址路径 恩。 mylaravelsite /产品/ 1

我建立一个网站,但我需要创建像mylaravelsite / products / {title}这样的网址路径 例: mylaravelsite /产品/名称的产品

执行 Alpha 解决方案之后,这样可行:)

1 个答案:

答案 0 :(得分:0)

你可以做到。如果您想将参数用作slug/string而不是id/numeric,则无关紧要。只需声明您为数字id参数声明的路径即可。例如,您可以声明如下路线:

Route::get(
    '/products/{title}',
    array('uses' => 'ProductController@show', 'as' => 'product.show')
);

然后,此路线的URL可能是http://yourdomain.com/products/name-of-product

人们使用id的原因是因为大多数情况下人们在他们的数据库中使用auto-incremented数字idprimary key,并且使用类似的东西是个好主意这将是独一无二的。您只需确保您的产品也是唯一的,并使用以下方法将它们作为slug插入数据库:

$product->title = Str::slug(Input::get('product_title'));

此外,您可以在路线中使用where条件,以确保提供给路线的产品名称是使用以下内容的字符串:

Route::get(
    '/products/{title}',
    array('uses' => 'ProductController@show', 'as' => 'product.show')
)->where('title', '[A-Za-z-]+');

这是我出于同样的原因使用的宏(从Slug到Title):

Str::macro('toTitle', function($str){
    return ucwords(str_replace('-', ' ', $str));
});

您也可以使用普通助手功能,如果需要,您可以使用preg_replace