2010-01-13 4 views
0

Использование Symfony1, как я могу проверить одно из двух полей, заполняется в форме? Это не обязательные поля, но мне нужно, чтобы пользователь заполнил одно из двух полей. Это моя попытка до сих пор, но он не работает:Логическая проверка Форма Symfony

$this->setValidator('phone', new sfValidatorAnd(
    array(
    new sfValidatorSchemaCompare('email', '==', ''), 
    new sfValidatorSchemaCompare('phone', '==', ''), 
), 
    array(), 
    array(
    'invalid' => 'El e-mail no tiene un formato correcto', 
    'required' => 'Campo obligatorio', 
) 
)); 

ответ

3

При сравнении двух отдельных полей, которые вы должны использовать глобальный валидатор: http://www.symfony-project.org/forms/1_2/en/02-Form-Validation#chapter_02_global_validators. Ваш текущий подход всегда будет отмечать поле телефона как недопустимое, когда возникает ошибка. Кроме того, условия, которые Вы обеспечиваете валидатор должен возвращать верно, когда значения действительны так в вашем случае вы должны использовать ValidatorOr с = сравнения, как это:

$this->validatorSchema->setPostValidator(new sfValidatorOr(
    array(
    new sfValidatorSchemaCompare('email', '!=', ''), 
    new sfValidatorSchemaCompare('phone', '!=', ''), 
), 
    array(), 
    array('invalid' => 'Campo obligatorio') 
)); 

Надежда, что помогает.

+0

Я пробовал, но он никогда не вызывает ошибку. не создавать регистр, но не показывать мне ошибку. как я могу показать ошибку? спасибо. – nebur85

+1

http://www.symfony-project.org/forms/1_2/en/03-Forms-for-web-Designers#chapter_03_sub_handling_global_errors Вы можете использовать $ form-> hasGlobalErrors() для проверки и эха $ form-> renderGlobalErrors() для печати. Если вы хотите выполнить индивидуальный рендеринг, вы можете выполнять итерацию через $ form-> getGlobalErrors() для пар имен и сообщений всех глобальных ошибок. – nortron

+0

Cyro, спасибо. Кажется, он работает нормально :) – nebur85

Смежные вопросы