我已按照示例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
?
非常感谢
答案 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%
替换完全限定的类名