2

我有一个表单类型,它有一个不在实体中作为属性的字段,但该实体有一个与表单字段同名的 getter 和一个 setter,解释:

表格类型:

$builder->add('theField', 'entity', array(
    'label' => 'The field',
    'class' => 'MyAppBundle:AnEntity',
    'empty_value' => '',
));

实体:

class User
{
    //There is NOT a property called "theField"

    public function setTheField($value)
    {
        ...
    }

    public function getTheField()
    {
        ...
    }
}

所以,我希望 Symfony2 调用 getter 和 setter 来绑定并显示表单字段,但我收到了这个错误:

Property theField does not exists in class My\AppBundle\Entity\User

有没有在实体中声明属性的情况下创建此表单字段的方法?

编辑

很奇怪,但是当我声明一个私有财产theField时,它就起作用了(顺便说一句,这不是我要找的)。

4

2 回答 2

2

您也可以使用mappedsymfony 选项来完成

$builder->add('chooseProduct', ChoiceType::class, array(
             'mapped'=> false,
             'required' => false,
             'placeholder' => 'Choose',
             'choices' => $this->entityManager->getRepository('App:Entity)->getSelectList(),
             'label_attr' => array('class' => 'control-label')
        ));
于 2018-03-19T22:36:57.543 回答
1

你试过了吗:

$builder->add('theField', 'entity', array(
    'label' => 'The field',
    'class' => 'MyAppBundle:AnEntity',
    'empty_value' => '',
    'property_path' => false,
));

更新

将您的字段名称更改为与实体中的属性相同或更改'property_path'为属性名称。

$builder->add('theField', 'entity', array(
    'label' => 'The field',
    'class' => 'MyAppBundle:AnEntity',
    'empty_value' => '',
    'property_path' => 'theField',
));

并在您的实体中添加:

private $theField = null;
于 2012-09-20T19:31:43.803 回答