2010-12-19 22 views
1

我有一個惱人的問題。我試圖找出表單的哪些字段已更改,然後將其插入表中。我設法在以下sfWidgetFormSelect提供了一個字符串或一個int的選定的項目?

public function doUpdateObject($values) 
{ 
    parent::doUpdateObject($values); 
    var_dump($this->getObject()->getModified(false)); 
    var_dump($this->getObject()->getModified(true)); 
} 

顯示doUpdateObjectas到的var_dump而現在似乎$這個 - >的getObject() - > getModified似乎之前和將其設置爲true或false值之後,給我的工作。

我現在面臨的問題是,一些如何,sfWidgetFormSelect似乎將我的一個字段保存爲一個字符串。在保存之前,完全相同的字段是一個整數。 (我之前和之後都通過var_dump得到了這個想法)。

下面是兩個變種轉儲結果顯示:

array(1) {["annoying_field"]=> int(3)} array(1) {["annoying_field"]=>string(1)"3"} 

這似乎導致學說認爲這是一個修改,從而使假陽性。

以我鹼形式,我有

under $this->getWidgets() 
'annoying_field' => new sfWidgetFormInputText(), 

under $this->setValidators 
'annoying_field' => new sfValidatorInteger(array('required' => false)), 

,最後在我的配置Form.class.php我已經重新配置該文件作爲這樣:

$this->widgetSchema['annoying_field'] = new sfWidgetFormSelect(array('choices' => $statuses)); 

狀態由含有像值的數組{「」a「,」b「,」c「,」d「}

我只想將狀態的索引存儲在數據庫中

而且我該如何將更改插入到另一個數據庫表中?讓我們說我的日誌表?

任何想法和建議,爲什麼這是發生的讚賞,我一直在試圖弄清楚和瀏覽谷歌的各種關鍵字沒有用。

謝謝!

編輯:

行,所以我創造了另一個領域,整數我的架構只是用於測試。 我創建了一個條目,將其保存並編輯。

這次發生了同樣的事情!

回答

0

好吧, 事實證明,我忘了做一個自定義驗證器來使用數組鍵。

1

第一,如果你什麼STATUS_ID被保存在數據庫中,你應該定義你的狀態數組是這樣的:

{1 => "a", 2 => "b", 3 => "c", 4 => "d"} 

這樣的方式,他知道,1應該像「一」等渲染。然後,保存時只應保存索引。

關於保存在另一個數據庫中,我的建議是修改由Form類定義的doSave方法,以符合您的需求。我只知道如何行走處理它,也許這可以幫助:

的DoSave就會方法劑量是這樣的:

protected function doSave($con = null) 
    { 
    if (null === $con) 
    { 
     $con = $this->getConnection(); 
    } 

    $old = $this->getObject()->getModifiedValues($this);//Define this 
    $new_object = new Log($old);//Create a new log entry 
    $new_object->save($con));//save it! 

    $this->updateObject(); 

    $this->getObject()->save($con); 

    // embedded forms 
    $this->saveEmbeddedForms($con); 
    } 

希望這有助於!

編輯:

這是一個模型,我的應用程序之一提取的例子,它的確定工作:

模式:

[...]  
funding_source_id: 
    type: integer 
    required: true 
[...] 

形式:

$this->setWidget('funding_source_id', new sfWidgetFormChoice(array(
    'choices' => array(1 => 'asdads', 2 => '123123123' , 3 => 'asd23qsdf'), 
))); 


$this->setValidator('funding_source_id', new sfValidatorChoice(array(
    'choices' => array(1 => 'asdads', 2 => '123123123' , 3 => 'asd23qsdf'), 
    'required' => true 
))); 

關於日誌的事情,這可能會更復雜,你應該閱讀當前的實施基本窗體類中的doSave方法的n,Symfony1.4上的當前sfFomrObject,以及何時以及如何委託處理修改後的值的對象。

+0

嘿!添加1 =>「a」等可能只是工作!爲什麼沒有發生在我身上。 D'哦!噢,也許我應該在doSave下做,而不是doUpdateObject。爲此非常感謝!當我回到家時,我會嘗試它,但現在,它仍然是一個投票。 – han 2010-12-20 03:01:01

+0

嘿韓希望能爲你解決問題,我會期待你的結果!我非常樂意幫助! – guiman 2010-12-20 03:03:17

+0

嘿,不幸的是,它不工作:(我嘗試檢測doSave下的變化,但他們變成空白。我也試過陣列的東西。它仍然是一樣的:( – han 2010-12-20 13:52:40

相關問題