Laravel 4可选路径参数

dav*_*der 5 routing laravel

我想知道如何为控制器方法添加可选的路由参数:

目前我有一条路线,如下所示:

Route::get('devices/{code}/{area}','HomeController@getDevices');
Run Code Online (Sandbox Code Playgroud)

和控制器方法:

public function getDevices($code=NULL,$area) {...}
Run Code Online (Sandbox Code Playgroud)

我的获取请求看起来像:

/devices/A/ABC
Run Code Online (Sandbox Code Playgroud)

它工作正常,但我希望{code}参数是可选的,以便我可以以不同的方式获取数据:

/devices//ABC or 
/devices/ABC
Run Code Online (Sandbox Code Playgroud)

我已经尝试了以下内容,但所有失败的NotFoundHttpException

Route::get('devices/{code?}/{area}','HomeController@getDevices'); Route::get('devices/(:any?)/{area}','HomeController@getDevices');

谢谢你的帮助.

Ser*_*hiv 10

可选参数必须位于URL的末尾.

所以你是一个明确的函数默认参数不正确的用法,如所描述这里.这就是您的代码无法按预期工作的原因.

您将不得不颠倒这两个参数的顺序或为这些情况实现不同的方法,考虑到您需要某种前缀来区分它们:

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);
}
Run Code Online (Sandbox Code Playgroud)

或者,正如我之前所说,反转参数:

Route::get('devices/area-and-code/{area}/{code?}','HomeController@getDevicesByAreaAndCode');

public function getDevicesByAreaAndCode($area, $code = NULL) {...}
Run Code Online (Sandbox Code Playgroud)