我想知道如何为 Controller 方法添加可选的路由参数:
目前我有一条路线,如下所示:
Route::get('devices/{code}/{area}','HomeController@getDevices');
和 Controller 方法:
public function getDevices($code=NULL,$area) {...}
我的获取请求将如下所示:
/devices/A/ABC
它工作正常,但我希望 {code} 参数是可选的,以便我可以通过不同的方式获取数据:
/devices//ABC or
/devices/ABC
我尝试了以下操作,但都失败了 NotFoundHttpException
Route::get('devices/{code?}/{area}','HomeController@getDevices');
Route::get('devices/(:any?)/{area}','HomeController@getDevices');
谢谢你的帮助。
最佳答案
可选参数需要位于 URL 的末尾。
所以你的明显错误使用了默认函数参数,如 here 所述.
这就是您的代码无法按预期工作的原因。
您必须颠倒这两个参数的顺序或为这些情况实现不同的方法,考虑到您需要某种前缀来区分它们:
Route::get('devices/area/{area}','HomeController@getDevicesByArea');
Route::get('devices/code-and-area/{code}/{area}','HomeController@getDevicesByAreaAndCode');
public function getDevicesByAreaAndCode($area, $code = NULL) {...}
public function getDevicesByArea($area) {
return $this->getDevicesByAreaAndCode($area);
}
或者,正如我之前所说,反转参数:
Route::get('devices/area-and-code/{area}/{code?}','HomeController@getDevicesByAreaAndCode');
public function getDevicesByAreaAndCode($area, $code = NULL) {...}
关于routing - Laravel 4 可选路由参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18846688/