我需要解决我的问题
通常人们会像mylaravelsite / products / {id}一样制作网址路径 恩。 mylaravelsite /产品/ 1
我建立一个网站,但我需要创建像mylaravelsite / products / {title}这样的网址路径 例: mylaravelsite /产品/名称的产品
执行 Alpha 解决方案之后,这样可行:)
答案 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
数字id
和primary 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
。