具有多个参数的路由在Laravel 4中无法正常工作?

时间:2014-07-21 11:19:20

标签: php laravel-4 laravel-routing

我正在尝试让我的网址友好。我希望我的网址像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');

我该如何解决?

1 个答案:

答案 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'])}}

都可以。当然每个人都会提供不同的网址。