我尝试使用参数调用其他控制器中的控制器。没有任何参数我没有问题。
return app()->call('App\Http\Controllers\AppointmentController@create');
AppointmentController.php
class AppointmentController extends Controller
{
public function create(CalendarInterface $calendar, Request $request) {
...
}
}
但是当我试图传递一个错误时,我有一个错误。
return app()->call('App\Http\Controllers\AppointmentController@create', $response);
AppointmentController.php
class AppointmentController extends Controller
{
public function create($response, CalendarInterface $calendar, Request $request) {
...
}
}
类型错误:传递给Illuminate \ Container \ Container :: call()的参数2必须是数组类型,给定对象
或者如果我这样做
return app()->call('App\Http\Controllers\AppointmentController@create', [$response]);
类型错误:传递给App \ Http \ Controllers \ AppointmentController :: create()的参数2必须实现接口App \ CalendarInterface,在[...] / app / Http / Controllers /中给出的Illuminate \ Http \ Request实例AppointmentController.php:18
答案 0 :(得分:1)
使用命名参数:
app()->call('App\Http\Controllers\AppointmentController@create', [
"response" => $response
]);
答案 1 :(得分:0)
Laravel的自动化DI可能不支持这个用例,只传递部分参数并要求他猜测还有待解决的问题。
尝试传递所有参数:
app()->call(
'App\Http\Controllers\AppointmentController@create',
[$response, app(CalendarInterface::class), app(Request::class)]
);
作为旁注,称这样一个"子控制器"可能是一个不好的做法。如何将业务逻辑转移到普通类?