2

这是我今天目睹的一些奇怪行为,我想知道为什么.. 我会直截了当地说:

所以我们使用 symfony 和 fos elasticabundle 的 a2lix 翻译

class Class
{
    use Translatable;

}

class ClassTranslation  implements \A2lix\I18nDoctrineBundle\Doctrine\Interfaces\OneLocaleInterface
{
    use Translation;

}

在这种情况下,一旦我运行

php 应用程序/控制台 fos:elastica:populate

我得到:

[InvalidArgumentException] 参数“语言环境”不存在。

但参数实际上在特征中(来自供应商,包括 2 个特征可翻译方法和可翻译属性)

问题是为什么会发生这种情况。我们拥有来自 trait 的属性,但是一旦我们运行命令它就找不到它。

好的,现在奇怪的部分来了!

在这种情况下,一切都按预期工作:

class Class
{
    use Translatable;

}

class ClassTranslation 
{
    use Translation;

}

如果我决定不实现该命令顺利运行的接口,则该接口只会强制您为 locale 属性设置 getter 和 setter。我只是想知道为什么会这样。

4

1 回答 1

1

这可能与https://github.com/a2lix/I18nDoctrineBundle/issues/16有关。

我认为这与 php 特征无关,因为不会有 InvalidArgumentException。如果接口不存在,可能不会执行 trait 的代码,因此在这种情况下没有错误。请检查您的特征的实现,也许做一些调试输出以查看代码何时执行以及何时发生异常。

于 2016-10-10T09:56:45.890 回答