b85*_*411 8 php symfony symfony-2.6
我想将我的翻译字符串注入服务中,所以我在服务定义中使用了这个:
arguments: [@doctrine.orm.entity_manager, @translator]
Run Code Online (Sandbox Code Playgroud)
我在构造函数中使用了这个:
public function __construct(\Doctrine\ORM\EntityManager $entityManager, \Symfony\Component\Translation\Translator $translator)
Run Code Online (Sandbox Code Playgroud)
但我得到这个错误:
.... __construct() must be an instance of Symfony\Component\Translation\Translator, instance of Symfony\Component\Translation\LoggingTranslator given...
Run Code Online (Sandbox Code Playgroud)
两者有什么区别?
Mat*_*teo 12
根据新闻公告,从版本2.6开始,翻译器组件被定义为服务类似translator.default.
所以改变你的服务定义:
arguments: [@doctrine.orm.entity_manager, @translator]
Run Code Online (Sandbox Code Playgroud)
同
arguments: [@doctrine.orm.entity_manager, @translator.default]
Run Code Online (Sandbox Code Playgroud)
Symfony 2.6引入了缺失的翻译记录,为此,"翻译"服务别名被真实翻译类的某种代理所取代.
正如在另一个(当前接受的)答案中所说,真正的翻译类现在是"translator.default"服务.但是使用此服务而不是"翻译器"将禁用这个新的Symfony功能,因此您可能希望避免这种情况.
要解决您的问题并仍然可以访问新功能,请更改构造函数的代码以接受TranslatorInterface的任何实现:
public function __construct(\Doctrine\ORM\EntityManager $entityManager, \Symfony\Component\Translation\TranslatorInterface $translator)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1716 次 |
| 最近记录: |