使用表单时未调用魔术方法 __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%
我已经按照示例实现了翻译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 methodsgetName()
,name()
,isName()
,hasName()
,__get()
exist and have public access in classAppBundle\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%