Я нашел решение, но я до сих пор не знаю, почему оригинальный код не работал.То, что я сделал, имеет уникальный пользовательский валидатор:
$this->validatorSchema['phone'] = new sfValidatorPhone(array('max_length' => 50, 'required' => false));
И sfValidatorPhone расширяет sfValidatorString:
<?php
class sfValidatorPhone extends sfValidatorString
{
protected function configure($options = array(), $messages = array())
{
$this->addOption('required');
$this->addMessage('required', 'The phone is required.');
$this->addMessage('international', sfContext::getInstance()->getI18n()->__('The phone must have the international country code (+/00)'));
parent::configure($options, $messages);
}
protected function doClean($value)
{
$phone = preg_replace('/[^0-9|+]/','',$value);
$phone = parent::doClean($phone);
...code...
return $phone;
}
}