如何获取 Laravel 路由的可选参数的值呢?

地址

http://www.a.com/a/b/12345

路由

Route::get('a/b/{c?}', 'Test\TestController@test')->name('test.test');

我希望在 Test 控制器的 test 方法中获取 c 参数的值 12345 ,我这个时候应该怎么做呢

现在的解决方法是

Route::get('a/b/{c?}', 'Test\TestController@test',function ($c = null) {return $c;})->name('test.test');

在控制器中仍然使用必选参数的获取方式
不知道有没有更好的解决方案

www.haowuliaoa.com
《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
讨论数量: 16

我是没看懂,想要默认值,直接在控制器方法参数写个默认值就行了

6年前 评论

@DavidNineRoc c 这个参数可能有,也可能没有,理想的答案是有的时候可以直接获取到,没有的时候也不会报错,下面的解决方案只是为了解决需求写的

6年前 评论
  • web.php
    Route::get('test/{c?}', 'TestController@test');
  • TestController.php
    public function test($c = 12345 )
    {
    }

    这样子写不行吗?

6年前 评论

@DavidNineRoc 下面的解决方案的写法跟你的写法是一个意思,你试试把 test($c = 12345 ) 中的 $c = 12345 去掉以后看看有没有办法获取到 $c 的值呢

6年前 评论

@生活无限好 我在想你为什么要这么做? 你是指domain.com/test/12345/访问是这样,然后在方法不写参数获取12345

6年前 评论

@DavidNineRoc 请求地址是http://www.a.com/a/b/12345 的时候,我可以在控制器中获取到 c的参数值为 123456

当请求的地址是 http://www.a.com/a/b 的时候不让他报错就行了

6年前 评论

file
文档都这样写,我也不知道了

6年前 评论

写默认参数有什么不好的吗?

6年前 评论

@DavidNineRoc 默认参数就代表肯定会接到c的值 他的意思应该是 没有的时候就不需要

6年前 评论

@DavidNineRoc 但是我觉得这个方法可以解决他的问题

6年前 评论

@IAmChen 是啊,我写的解决方案就是这种

6年前 评论

不是太懂,不想让控制器报错,要么给这个变量一个默认值,要么在控制器做一下判断。

6年前 评论
Toiu

自然是要一个默认值的, 但是这个默认值放在那里 你需要就用, 不需要就不管他, 对程序没什么影响吧?

6年前 评论

萌新今天遇到了这个问题,总体来说就是不想写默认值让可选参数在没有填的情况下不报错。控制器只填Request
public function test(Request $request) {
$c = $request->route('c');
if(empty($c)) {}
}
在没有传c时,$c是null

4年前 评论

@shine1434

$c = $request->get('c','');
4年前 评论

我也遇到了这个问题,你应该举例是

Route::get('a/{b?}/c', 'Test\TestController@test')->name('test.test');

b 是可选参数,这个要怎么写路由呢?不传 b ,报错404.

4年前 评论
22 (楼主) 4年前
bandung 3年前

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!