1

假设我有一个实体。

由于域逻辑,该实体有两个字段,只能通过一个函数更改

我怎样才能使表单框架使用一种方法调用来设置值。

我所读到的data transformers,让我觉得它不能用于这个提议。

接下来是form events,这是可用的事件

PRE_BIND    
BIND    
POST_BIND   
PRE_SET_DATA    
POST_SET_DATA   
BIND_CLIENT_DATA    
BIND_NORM_DATA  
SET_DATA

但有关这方面的文档非常稀缺。

这是一个示例实体

<?php

namespace X3\TestBundle\Entity;

use Doctrine\ORM\Mapping as ORM;

/**
 * Test
 *
 * @ORM\Table()
 * @ORM\Entity(repositoryClass="X3\TestBundle\Entity\TestRepository")
 */
class Test
{
    /**
     * @var integer
     *
     * @ORM\Column(name="id", type="integer")
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    private $id;

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

    /**
     * @var string
     *
     * @ORM\Column(name="firstValue", type="string", length=255)
     */
    private $firstValue;

    /**
     * @var string
     *
     * @ORM\Column(name="secondValue", type="string", length=255)
     */
    private $secondValue;


    /**
     * Get id
     *
     * @return integer
     */
    public function getId()
    {
        return $this->id;
    }

    /**
     * Set name
     *
     * @param string $name
     * @return Test
     */
    public function setName($name)
    {
        $this->name = $name;

        return $this;
    }

    /**
     * Get name
     *
     * @return string
     */
    public function getName()
    {
        return $this->name;
    }

    /**
     * Set firstValue
     *
     * @param string $firstValue
     * @return Test
     */
    protected function setFirstValue($firstValue)
    {
        $this->firstValue = $firstValue;

        return $this;
    }

    /**
     * Get firstValue
     *
     * @return string
     */
    public function getFirstValue()
    {
        return $this->firstValue;
    }

    /**
     * Set secondValue
     *
     * @param string $secondValue
     * @return Test
     */
    protected function setSecondValue($secondValue)
    {
        $this->secondValue = $secondValue;

        return $this;
    }

    /**
     * Get secondValue
     *
     * @return string
     */
    public function getSecondValue()
    {
        return $this->secondValue;
    }

    //
    // The objective here is that the form use this function
    // to set the two values in one call
    //
    protected function setValues($firstValue, $secondValue)
    {
        $this->firstValue = $firstValue;
        $this->secondValue = $secondValue;

        return $this;
    }
}

请注意setFirstValue($firstValue)and setSecondValue($secondValue)are protected,应该使用方法设置值setValues($firstValue, $secondValue)

有没有我可以使用的事件来检索firstValueandsecondValue并使用它来设置它setValues($firstValue, $secondValue)并避免form component抱怨Method "setFirstValue()" is not public in class...

一些代码或链接,将是一个奖励。

4

2 回答 2

0

扩展表单框架并不容易,即使使用一些表单事件。

一种可能的解决方案是values在未映射到任何数据库字段的实体及其 setter 和 getter 中简单地创建属性。然后该setValues函数可以做任何需要设置firstValuesecondValue

于 2013-05-24T00:34:21.890 回答
0

您可能想要使用DataTransformer。它允许您控制数据在两个方向上的转换。无论如何,您需要在values表单中添加字段,这将转换为两个字段并保存为一个字段。

于 2013-05-24T05:08:37.270 回答