Проверка PHP Cake, изменение входящих $ data

У меня проблема с проверкой торта. Пользователь вводит, например, «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));
}

Я надеюсь, что вы можете помочь. заранее спасибо


person Karl    schedule 05.04.2013    source источник


Ответы (1)


Если вам нужно сохранить только сумму в базе данных, а не знак евро, вы должны удалить знак евро перед проверкой.

Вы можете сделать это внутри 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 фактическим именем поля)

После удаления символа валюты проверьте значение с помощью decimal или _5 _ правило проверки

примечание. Если вы действительно хотите сохранить значение, включая символ валюты, используйте ядро ​​_ 6_ правило проверки.

person thaJeztah    schedule 05.04.2013
comment
Ух ты! Именно то, что мне нужно. Я заменил маску HTML на €, и она отлично работает :-) - person Karl; 06.04.2013
comment
Рад, что смог помочь! Удачи тебе с твоим проектом - person thaJeztah; 06.04.2013