使用表单时不会调用Magic方法__call

时间:2018-02-12 13:28:26

标签: symfony symfony-3.4

我已按照示例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'
        ]);
    }
}

所以我收到一个错误:

  

属性name或其中一种方法getName()name()isName()hasName()__get()都不存在且公开   在班级AppBundle\Entity\Occupation中访问。

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

非常感谢

1 个答案:

答案 0 :(得分:3)

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

  

默认情况下,__ call()功能处于停用状态,您可以通过调用PropertyAccessorBuilder::enableMagicCall see Enable other Features启用它。

因为有问题的财产访问者很可能是由您的表单自动构建的,所以您实际上无法调用enableMagicCall,据我所知,没有办法只更改此设置一种表格类型。

话虽如此,您可以通过在services.yml(取自this discussion)中添加以下条目来全局启用此功能,以便可以为所有PropertyAccessor将magicCall argument of the constructor设置为true你的申请。

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

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