在控制器

时间:2017-08-03 16:39:03

标签: laravel laravel-5.2 laravel-routing

我在routes.php中定义的路由类似于:

Route::get('something/{firstId}/{secondId}/{thirdId}/{nthId}', 'SomeController@read')->name('read');

在我的控制器中,我设置了这样的设置,完美无缺:

public function read($firstId, $secondId, $thirdId, $nthId, Request $request){
   ...
}

对于特定方法,我不需要$firstId$secondId等。我只需要$nthId。是否可以设置我的控制器,以便我可以抓住第n个参数并简化我的代码?例如:

public function read($nthId, Request $request){
   ...
}

1 个答案:

答案 0 :(得分:2)

您可以使用可变参数设置参数列表前面的... php.net arguments page上有一个有趣的标题,就是这样:

enter image description here

因此,在您的情况下,您将拥有:

public function read(Request $request, ...$ids){
   $id2 = $ids[1]; //here is the second path parameter in /id1/id2/id3/..n
   ...
}

有一点是可变参数必须在声明中最后。

  

Ps:关于注入其他参数我可能不完全正确,但至少在上面的例子中,它可以正常工作。