在一个表单域中使用两个实体字段

时间:2014-05-01 18:27:33

标签: forms symfony

我想使用一个文本表单字段将数据保存在两个实体属性中。但是,我没有找到任何可能导致干净实施的解决方案/提示。

考虑以下示例†:

  • 有一个具有两个属性的Doctrine实体:count,unit
  • 用户输入" 34个苹果"在简单的文本输入字段中
  • DataTransformer(或任何合适的东西)应该以这样的方式转换这个值:在底层实体中计算=' 34'和单位=' apple'正在被救。

1 个答案:

答案 0 :(得分:0)

你可以有一个未在数据库中映射的字段,在prePersist和preUpdate方法中,你可以转换数据并将它们保存在适当的字段中。例如:

/**
 *
 * @ORM\HasLifecycleCallbacks()
 */
class MyClass
{
    private $info;

    /**
     * @ORM\Column(name="count", type="integer")
     */
    private $count;

    /**
     * @ORM\Column(name="unit", type="string")
     */
    private $unit;

    /**
     * @ORM\PrePersist()
     * @ORM\PreUpdate()
     */
    public function separateInfo(){
        $infoArray     = explode(' ', $this->info);
        $this->count   = $infoArray[0];
        $this->unit    = $infoArray[1];
    }
}

在表单中,您只需添加'信息'字段:

class MyClassType extends AbstractType
{
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder
            ->add('info');
    }
}

这未经过测试,但它可以帮助您。

我希望这对你有用。

亲切的问候。