Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/299.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 使用参数调用控制器_Php_Laravel_Laravel 5 - Fatal编程技术网

Php 使用参数调用控制器

Php 使用参数调用控制器,php,laravel,laravel-5,Php,Laravel,Laravel 5,我尝试用一个参数调用另一个控制器中的一个控制器。没有任何参数,我没有问题 return app()->call('App\Http\Controllers\AppointmentController@create'); AppointmentController.php class AppointmentController extends Controller { public function create(CalendarInterface $calendar, Requ

我尝试用一个参数调用另一个控制器中的一个控制器。没有任何参数,我没有问题

return app()->call('App\Http\Controllers\AppointmentController@create');
AppointmentController.php

class AppointmentController extends Controller
{

    public function create(CalendarInterface $calendar, Request $request) {
        ...
    }
}
class AppointmentController extends Controller
{

    public function create($response, CalendarInterface $calendar, Request $request) {
        ...
    }
}
但是当我试图通过一个时,我有一个错误

return app()->call('App\Http\Controllers\AppointmentController@create', $response);
AppointmentController.php

class AppointmentController extends Controller
{

    public function create(CalendarInterface $calendar, Request $request) {
        ...
    }
}
class AppointmentController extends Controller
{

    public function create($response, CalendarInterface $calendar, Request $request) {
        ...
    }
}
类型错误:传递给Illumb\Container\Container::call()的参数2必须是给定对象的数组类型

或者如果我这样做了

return app()->call('App\Http\Controllers\AppointmentController@create', [$response]);
类型错误:传递给App\Http\Controllers\AppointmentController::create()的参数2必须实现接口App\CalendarInterface,该接口是[…]/App/Http/Controllers/AppointmentController.php:18中给出的照亮\Http\请求的实例

使用命名参数:

app()->call('App\Http\Controllers\AppointmentController@create',  [
    "response" => $response
]);

Laravel的automagic DI可能不支持这个用例,只传递部分论据,让他猜测还有什么需要解决

尝试传递所有参数:

app()->call(
    'App\Http\Controllers\AppointmentController@create',
    [$response, app(CalendarInterface::class), app(Request::class)]
);


作为旁注,称这样的“子控制器”可能是一种不好的做法。将业务逻辑移动到普通类怎么样?

错误很明显。您需要执行
app()->call('app\Http\Controllers\AppointmentController@create“,[$response])类型错误:传递给App\Http\Controllers\AppointmentController::create()的参数2必须实现接口App\CalendarInterface,该接口是[…]/App/Http/Controllers/AppointmentController.php:18
中给出的lightize\Http\Request的实例。为什么首先要调用控制器?不建议这样做。你应该重构你的代码我正在构建一个机器人,当机器人收到消息时,它会调用一个控制器。机器人可以做很多事情,所以我每件事都有一个控制器!!