2013-04-05 140 views
0

我的蛋糕驗證有問題。 用戶輸入例如「20€」在一個表單字段中,我只想得到數字「20」與歐元符號剝離。但驗證方法只允許檢查它是否應該是什麼東西。

I'm關於我的規則集,但I'm努力走得更遠,因爲在什麼背景下蛋糕函數返回的是真或假,而不是修改變量就像我需要創建一個功能...

'rule-3' => array(
    'rule' => 'checkEuro', 
    'message' => 'don´t need one because it should be a conversion only :-(' 
) 

public function checkEuro($data) { 
    $data = str_replace('€','',$data); 
    return preg_replace('/[^0-9]/','', html_entity_decode($data)); 
} 

我希望你能幫上忙。 在此先感謝

回答

3

如果你只需要存儲的自身的數據庫內,歐元兌標誌,你應該驗證之前,歐洲的跡象。

您可以在模型的beforeValidate()回調中執行此操作;

public function beforeValidate(array $options = array()) 
{ 
    if (!empty($this->data[$this->alias]['FIELDNAME']) { 
     // Strip the euro-sign 
     // NOTE: should also take plain, non-entity € into account here? 
     $this->data[$this->alias]['FIELDNAME'] = str_replace(
      '€', '', $this->data[$this->alias]['FIELDNAME'] 
     ); 
    } 

    return parent::beforeValidate($options); 
} 

(當然,實際字段名替換FIELDNAME

剝離的貨幣符號後,使用decimalnumeric驗證規則

如果驗證值做想存儲價值包括貨幣符號,使用核心money valida重刑法則。

+0

哇!正是我需要的。我將HTML掩碼換成了「€」,它的工作原理非常棒:-) – Karl 2013-04-05 22:32:38

+0

很高興能幫到你!祝你的項目好運 – thaJeztah 2013-04-05 22:33:24