【问题标题】:Symfony: translator becomes translator.default in productionSymfony:翻译器成为翻译器。生产中的默认值
【发布时间】:2017-12-21 21:24:14
【问题描述】:

我正在使用 symfony 3.2,并且我有一个类(用于检查给定电子邮件地址是否已被占用的表单的验证器),它被定义为服务并接受 3 个注入其中的参数:

arguments:
    entityManager: "@doctrine.orm.entity_manager"
    translator: '@translator'
    tokenStorage: '@security.token_storage'

“translator”属于“DataCollectorTranslator”类型。

现在,一切都在开发模式下工作,我检查了创建的缓存文件并找到了一个方法(名为“getLp_Validator_DuplicateEmailService”),它使用翻译器作为第二个参数创建验证器,如下所示:

$this->get('translator')

然而,在生产模式下,验证器是使用“translator.default”而不是“translator”创建的,导致缓存文件中出现以下行:

$this->get('translator.default')

这(不是很令人惊讶)导致以下错误:

Type error: Argument 2 passed to DuplicateEmailValidator::__construct() must be an instance of Symfony\\Component\\Translation\\DataCollectorTranslator, instance of Symfony\\Bundle\\FrameworkBundle\\Translation\\Translator given

为什么 symfony 会在 prod 和 dev 之间产生差异,我如何阻止它向我的班级注入错误类型的服务?

感谢任何提示!

【问题讨论】:

    标签: php forms symfony validation


    【解决方案1】:

    你有什么东西可以改变 dev/prod 的行为吗?比如 services.yml !== services_dev.yml ?

    【讨论】:

    • 不,form-validators 的服务在单独的 validators.yml 中定义,dev 和 prod 的文件相同。
    【解决方案2】:

    经过数小时的调试,我最终通过在我的验证器类的构造函数中将“DataCollectorTranslator”与“TranslatorInterface”交换来解决此问题,因此(DataCollectorTranslator 和 Translator)都可以工作,我并不真正考虑修复它,而是一种解决方法。

    public function __construct(
        EntityManager $entityManager,
        TranslatorInterface $translator,
        TokenStorageInterface $tokenStorage
    ) {
        $this->entityManager = $entityManager;
        $this->translator    = $translator;
        $this->tokenStorage  = $tokenStorage;
    }
    

    我仍然很感兴趣,为什么 dev 和 prod 之间存在差异,所以如果有人知道原因,请留下答案,因为可能存在其他无法轻松解决问题的情况。

    【讨论】:

      【解决方案3】:

      聚会迟到了,但我还是会添加这个,因为它可能有用。

      正如issue 中所讨论的:

      在 dev 中,翻译服务使用 DataCollectorTranslator 进行修饰,以将其集成到分析器中。

      此外:

      如果您想对服务进行类型提示,请使用接口,而不是实现。

      这实际上正是其他 answer 中提到的内容。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-03-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-07-28
        相关资源
        最近更新 更多