0

我的蛋糕验证有问题。用户在表单字段中输入例如“20 欧元”,我只想得到去掉欧元符号的数字“20”。但是验证方法只允许检查某事是否是它应该是的。

我即将在我的规则集中创建一个函数,但我正在努力走得更远,因为该函数在蛋糕上下文中返回的是真或假,而不是像我需要的修改后的变量......

'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));
}

我希望你能帮忙。提前致谢

4

1 回答 1

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为实际的字段名)

剥离货币符号后,使用decimalornumeric验证规则验证值

note 如果您确实要存储包含货币符号的值,请使用核心money验证规则。

于 2013-04-05T22:15:46.803 回答