2010-01-13 141 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您提供的驗證條件應返回true =比較像這樣:

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

希望有所幫助。

+0

我嘗試過,但它從來沒有提出錯誤。不創建註冊,但都沒有告訴我錯誤。我如何顯示錯誤? 謝謝。 – nebur85 2010-01-16 12:41:41

+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 2010-01-17 01:02:37

+0

Cyro,謝謝。它似乎工作確定:) – nebur85 2010-01-18 14:06:06