我正在尝试让我的网址友好。我希望我的网址像http://www.example.com/products/asus-zenfone-4-5649。我使用以下代码。但它运作不正常。
在我的routes.php中,
Route::get('/products/{name}-{id}', 'ProductController@showProduct');
在我的控制器中,
public function showProduct($name, $id)
{
echo $name;
echo $id;
}
如果网址与http://www.example.com/products/motoe-5649类似,则会显示
$name = motoe
$id = 5649 ---> Working fine
如果网址与http://www.example.com/products/asus-zenfone-4-5649类似,则会显示
$name = asus
$id = zenfone-4-5649 ---> Not working properly
注意:不想使用。
Route::get('/products/{name}/{id}', 'ProductController@showProduct');
我该如何解决?
答案 0 :(得分:0)
这个Route::get('/products/{name}-{id}', 'ProductController@showProduct');
只需要两个参数。一个名为name
的{{1}}之后/products/
之前,-
之后的id
。因此,-
被认为是-
参数之后存在的任何内容,无论它包含多少id
。
如果要使用更多参数,请将它们添加到路径和控制器的方法声明中。如果您有可选参数,请使用旁边的问号使其在路线中可选,并在方法中将默认值指定为null。
路线:
-
控制器的方法:
Route::get('products/{name}-{id}-{parameter1?}-{parameter2?}, ['as' => 'products', 'uses' => 'ProductController@showProduct']);
呼叫路由:
public function showProduct($name, $id, $parameter1 = null, $parameter2 = null)
{
return $name.$id.$parameter1.$parameter2;
}
或
{{route('products', ['aName', 'anId'])}}
都可以。当然每个人都会提供不同的网址。