手动调用带参数的控制器方法,仍然有方法注入

时间:2015-05-19 23:13:30

标签: laravel laravel-5 ioc-container laravel-routing

如何手动调用控制器方法指定一些输入参数,但仍然对未指定的参数进行方法注入工作(例如下面的例子)。

routes.php文件

pip install "path/to/file/pgu-0.18.zip

控制器/ MyControllerOne.php

$myController->index($id);

额外信息 我需要这个的原因是因为我在路由中有特殊信息来确定应该执行哪个控制器,例如class MyControllerOne { public function index($id, MyRequest $request) { } } 。它有点不正统,但考虑到我们系统的范围,这是一个必要的邪恶。 一旦我在我的路线中解决了需要调用的控制器,我就想在该控制器上调用该方法。 /myroute/{data}/{id}

1 个答案:

答案 0 :(得分:2)

如果它仅适用于请求,我认为您可以手动传递此$this->app->make('Request'),就像这样

$controllerIntance->index($id, $this->app->make('Request'))

请注意,您实际上不必注入请求,因为您也可以在控制器内部使用App::make。但是我不确定在可测试性和耦合的情况下这个决定有多好。

有关详细信息:

此功能可解决“请求”问题。超出容器,即实例化或返回现有实例(取决于服务提供者的类型)。

此处描述了使用make http://laravel.com/docs/5.0/container(请参阅"解析")。我还发现这个答案对于理解容器的工作方式很有帮助https://stackoverflow.com/a/25798288/1627227