2015-10-17 11 views
8

Trong symfony 2.3 đó là dòng này trong service.yml để có được phiên dịchsymfony2.7 vượt qua phiên dịch cho vào bình chứa dịch vụ

Trong service.yml

arguments: [@translator,.... 

trong serviceFunctions.php

public function __construct(Translator $translator,...) { 
    $this->translator = $translator; 

Bây giờ tôi gặp lỗi:

must be an instance of Symfony\Component\Translation\Translator, instance of Symfony\Component\Translation\DataCollectorTranslator given

Làm thế nào tôi có thể nhận được dịch vụ ở 2,7 trong dev cũng ở chế độ sản xuất?

+4

thể bản sao của http://stackoverflow.com/questions/291 62346/symfony-loggingtranslator-vs-translator –

+0

Không có câu trả lời nào dưới đây đúng, hãy vào liên kết của câu hỏi trùng lặp để tìm câu trả lời –

+1

Làm theo câu trả lời trong liên kết câu hỏi trùng lặp sẽ đánh bại đối tượng có môi trường gỡ lỗi như bạn sẽ không bao giờ có thể sử dụng phiên bản gỡ lỗi của bất kỳ dịch vụ nào. Chỉ cho phép bạn chèn một dịch vụ cụ thể khi một giao diện sẽ đảm bảo rằng bạn sẽ có các phương pháp đúng là vô lý. Bạn thưa bạn, đang làm điều đó sai. – qooplmao

Trả lời

5

Thử sử dụng giao diện thay vì lớp phiên dịch thực tế. Bằng cách sử dụng giao diện dưới dạng gợi ý kiểu, bạn có thể sử dụng bất kỳ thứ gì miễn là nó phù hợp với giao diện, ví dụ bạn có thể chuyển qua trình dịch lỗi trong quá trình phát triển với phiên bản thông thường trong sản xuất mà không cần thay đổi mã của bạn.

use Symfony\Component\Translation\TranslatorInterface; 

... 

public function __construct(TranslatorInterface $translator) 
{ 
    $this->translator = $translator; 
} 
9

Cố gắng folow này bước:

Class:

use Symfony\Component\Translation\TranslatorInterface; 

public function __construct(TranslatorInterface $translator) { 
    $this->translator = $translator; 
} 

public function yourFunction(){ 
    $this->translator->trans('key', array(), 'yourDomain'); 
} 

dịch vụ:

yourService: 
     class: yourClass 
     arguments: [@translator] 
     tags: 
      - { name : kernel.event_listener, event: kernel.request, method: yourFunction } 

tôi sử dụng điều này trong mã của tôi và nó làm việc;)

Các vấn đề liên quan