routing - Laravel 4 可选路由参数

标签 routing laravel

我想知道如何为 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/

相关文章:

networking - 主机路由表的理解

php - Laravel 路由错误 404

Laravel Eloquent 增量不更新时间戳

javascript - 有没有一种方法可以使用网络语言根据用户名生成图像,例如iOS7收藏夹?

node.js - 为什么 webpack 在运行 npm run dev 时会报错

asp.net - 从 WebForms 4.0 Asp.Net 中的 Page.GetRouteURL() 返回的错误链接

routing - 如何根据请求的 URL 的域在 Flask 中路由?

mysql - 无法在 php artisan migrate 上连接到 mysql

routing - 评估 OpenStreetMap 的国际路线

php - 如何在 laravel 中将多个复选框值发送到数据库?