使用参数

时间:2017-07-13 07:40:43

标签: php laravel laravel-5

我尝试使用参数调用其他控制器中的控制器。没有任何参数我没有问题。

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

2 个答案:

答案 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)]
);


作为旁注,称这样一个"子控制器"可能是一个不好的做法。如何将业务逻辑转移到普通类?