【发布时间】:2019-01-11 21:10:06
【问题描述】:
在 Symfony 4.2 中,Controller 类已被弃用,您应该切换到 AbstractController,因此除了他们为您定义的一些服务外,您无法再访问 $this->get('service.name') 功能。
我的基本控制器扩展了 Symfony 的控制器并具有利用 $this->get 功能的功能:
public function getRepository($repository){
$repo = $this->get($repository);
if($this->authRepository !== null) {
$repo->setPrefix($this->authRepository);
}
return $repo;
}
所以在我的控制器中,我可以说类似$this->getRepository('api.service'); 的内容,然后它会加载我的服务,根据请求设置前缀,然后返回配置的 api.service。
使用新的 AbstractController 和服务的自动装配/自动注入,我如何告诉我的服务不仅调用 setPrefix 方法(我知道我可以这样做),而且告诉它在我的控制器中使用参数?
到目前为止的配置:
api.service:
class: App\ApiService
calls:
- method: setPrefix
arguments:
- '??????'
【问题讨论】:
-
哪个参数?如果您的意思是参数数组的第一个参数,它将是一个类变量,因此您可以使用
$this->...调用它。如果它是一项服务,您可以向setPrefix(Here.. $something)输入提示,看看是否有效? symfony.com/doc/current/service_container/calls.html -
为什么不通过构造函数将
authRepository自动连接到您的存储库? -
您可以通过可以访问请求的工厂来执行此操作。
-
我能够通过设置事件监听器然后使用前缀类的静态变量来实现这一点。不理想,但该值会在每次调用时设置一次,并且每个服务都可以从那时起访问数据。
标签: symfony