如何在symfony save方法中获取原始值?

时间:2011-04-14 01:32:19

标签: php symfony1 symfony-1.4 overloading

我正在编写一个symfony 1.4应用程序,并且我正在尝试设置在编辑对象时如果特定值更改将运行的代码。

我试图在模型类中而不是在视图内部执行此操作,因为只要保存此对象,这将适用。

有没有办法在用户做出任何更改之前访问对象的原始值?

注意:

该对象尚未保存,因此仍然可以(以某种方式)检索原始值。

CODE:

public function save()
{
    if($this->isNew())
        $this->getAcctRelatedByAccountId()->updateCurrentBalance(($this->isAdditive()) ? $this->getAmount(): $this->getAmount()*-1);

    // get the original value HERE

    // do work based on the original value

    // do work based on the new, submitted value

    return parent::save();
}

4 个答案:

答案 0 :(得分:2)

如果您不需要在保存时进行计算,请覆盖列的设置器。

每当设置一个值时,你可以根据原始值进行计算,然后在新值上进行计算,最后调用覆盖的父设置器来实际设置新值。

答案 1 :(得分:0)

你可能会得到这样的价值:$this->_get('field'); (_set('field', value)) ?

或者您可以使用doctrine event listeners

答案 2 :(得分:0)

我遇到类似问题的方法:

/**
 * Returns Record's original values before saving the new ones
 *
 * @return array
 */
public function getOldValues()
{
    $arr_modified = $this->getModified(true);
    $arr = $this->toArray(false);

    foreach ($arr_modified as $k => $v)
    {
        $arr[$k] = $v;
    }

    return $arr;
}



/**
 * Sample usage of getOldValues
 *
 * @param Doctrine_Connection $conn
 */
public function save(Doctrine_Connection $conn = null)
{
    $dispatcher = ProjectConfiguration::getActive()->getEventDispatcher();

    /* object values before saving */
    $arr_before = $this->getOldValues();

    $event_name = 'myobject.update';
    if (true == $this->isNew())
    {
        $event_name = 'myobject.add';
    }

    parent::save($conn);

    /* object values after saving */
    $arr_after = $this->toArray(true);

    /* Notify about the record changes */
    if ($dispatcher instanceof sfEventDispatcher)
    {
        $dispatcher->notify(new sfEvent($this, $event_name, array('before' => $arr_before, 'after' => $arr_after)));
    }
}

答案 3 :(得分:0)

您可以通过覆盖processForm()来实现。在操作中从缓存中获取它,您可以:

$form->getObject() ;    //the original object
$request->getParameter($form->getName()) ;    // the new object