使用 Laravel 8,我有以下路线:
Route::resource('dummy/{optionalParams?}', 'Api\DummyController');
在控制器中,我有方法
public function index(Request $request, array $optionalParams)
但是显然这不会自动连接/注入,我什至尝试在其上方定义自定义路由:
Route::get('dummy/{optionalParams?}/', 'Api\DummyController@index');
- 仍然遇到同样的问题,错误看起来像:
ArgumentCountError 函数参数太少 App\Http\Controllers\Api\DummyController::index(), 1 传入 /var/www/vendor/laravel/framework/src/Illuminate/Routing/Controller.php 在第 54 行正好是 2 个预期
即使我将类型提示更改为常规
int
,或者对于第二个变量根本没有类型提示 - 同样的错误。
如果我在没有第二个参数的情况下执行
dd($request->input());
,它会按预期工作,对于看起来像这样的虚拟URL:/api/dummy?optionalParams[]=1&OptionalParams[]=2
并且它可以输出:
^ array:1 [
"optionalParams" => array:2 [
0 => "1"
1 => "2"
]
]
我可以那样工作并检索它,但我认为如果它被注入到控制器方法中,它会更好更干净,也更容易进行单元测试和 API 文档。
如何实现这一点,如果可能的话最好在单个
resource
路线声明中实现?
公共函数索引(请求 $request, $optionalParams = array())
阅读更多... routage Laravel