如何获取 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');
在控制器中仍然使用必选参数的获取方式
不知道有没有更好的解决方案
关于 LearnKu
我是没看懂,想要默认值,直接在控制器方法参数写个默认值就行了
@DavidNineRoc c 这个参数可能有,也可能没有,理想的答案是有的时候可以直接获取到,没有的时候也不会报错,下面的解决方案只是为了解决需求写的
这样子写不行吗?
@DavidNineRoc 下面的解决方案的写法跟你的写法是一个意思,你试试把
test($c = 12345 )中的$c = 12345去掉以后看看有没有办法获取到$c的值呢@生活无限好 我在想你为什么要这么做? 你是指
domain.com/test/12345/访问是这样,然后在方法不写参数获取12345?@DavidNineRoc 请求地址是
http://www.a.com/a/b/12345的时候,我可以在控制器中获取到c的参数值为123456当请求的地址是
http://www.a.com/a/b的时候不让他报错就行了文档都这样写,我也不知道了
写默认参数有什么不好的吗?
@DavidNineRoc 默认参数就代表肯定会接到c的值 他的意思应该是 没有的时候就不需要
@DavidNineRoc 但是我觉得这个方法可以解决他的问题
@IAmChen 是啊,我写的解决方案就是这种
不是太懂,不想让控制器报错,要么给这个变量一个默认值,要么在控制器做一下判断。
自然是要一个默认值的, 但是这个默认值放在那里 你需要就用, 不需要就不管他, 对程序没什么影响吧?
萌新今天遇到了这个问题,总体来说就是不想写默认值让可选参数在没有填的情况下不报错。控制器只填Request
public function test(Request $request) {
$c = $request->route('c');
if(empty($c)) {}
}
在没有传c时,$c是null
@shine1434
我也遇到了这个问题,你应该举例是
b 是可选参数,这个要怎么写路由呢?不传 b ,报错404.