使用表单时未调用魔术方法 __call

Magic method __call is not called when using a form

我已经按照示例实现了翻译here

在我的实体中,我应该添加魔术方法 __call:

class Occupation
{
    use ORMBehaviors\Translatable\Translatable;

    /* ... attributes ... */

    public function __call($method, $arguments)
    {
        return $this->proxyCurrentLocaleTranslation($method, $arguments);
    }
}

但是在获取以下形式的数据时不会调用此方法:

class PostJobStep1Type extends AbstractType
{
    public function buildForm(FormBuilderInterface $builder, array $options)
    {            
        $builder->add('occupation', EntityType::class, [
            'label' => 'form.occupation',
            'class' => Occupation::class,
            'choice_label' => 'name'
        ]);
    }
}

所以我得到一个错误:

Neither the property name nor one of the methods getName(), name(), isName(), hasName(), __get() exist and have public access in class AppBundle\Entity\Occupation.

有没有办法强制Symfony也检查魔法方法__call

非常感谢

您的问题似乎与 PropertyAccessor 组件的默认配置有关。如 in the documentation 所述,允许使用 __call 的功能默认禁用:

The __call() feature is disabled by default, you can enable it by calling PropertyAccessorBuilder::enableMagicCall see Enable other Features.

因为,有问题的 属性 访问器很可能是由您的表单自动构建的,您实际上不能调用 enableMagicCall,据我所知,没有办法改变此设置仅适用于一种表单类型。

也就是说,您可以通过将以下条目添加到您的 services.yml 来全局启用此功能(取自 this discussion) so that the magicCall argument of the constructor 可以为您的应用程序的所有 PropertyAccessor 设置为 true。

property_accessor:
    class: Symfony\Component\PropertyAccess\PropertyAccessor
    arguments: [true]

注意:在 SF2.8 中,您可以将完全限定的类名替换为 %property_accessor.class%