1) новый валидатор нового проекта (здесь мы будем использовать его как фильтр значений):
/ Библиотека / валидатор / MyProjectStringLowerCase.class.php
<?php
class MyProjectStringLowerCase extends sfValidatorBase
{
/**
* @see sfValidatorBase
*/
protected function doClean($value)
{
return strtolower($value);
}
}
2) привязать его к полю:
$this->setWidget('my_field_name', new sfWidgetFormInputText());
$this->validatorSchema['my_field_name'] = new MyProjectStringLowerCase();
Если у вас уже есть какой-то валидатор в этом поле, вы можете объединить их в комбинированные валидаторы следующим образом:
$this->validatorSchema['my_field_name'] = new sfValidatorAnd(array(
$this->validatorSchema['my_field_name'], // the original field validator
new MyProjectStringLowerCase(),
));
Объединенный порядок валидаторов влияет на то, как значение будет проходить через них, поэтому, если вы хотите фильтровать значение во второй валидации, установите MyProjectStringLowerCase в качестве первой.
Существует два различия между этим подходом и использованием постобработки (например, doSave ()):
- значение здесь будет фильтроваться после каждой отправки (и будет отображаться
фильтруется при отображении ошибок формы)
- Вы можете использовать его очень легко и просто в других областях или формах в
ваш проект