2017-09-24 139 views
0

我這裏所描述的完全一樣的問題:Optional embed form in Symfony 2Symfony的3:嵌入式形式全有或全無的驗證錯誤顯示

我對實體具有爲實體電話嵌入表單的表單。用戶可以將電話的所有字段留空並且該表格將是有效的。但是如果單個字段的電話已填寫,則全部電話-字段必須有效。

在我的第一個方法,我簡單地@Assert\Valid()註釋的電話業者@Assert\NotNull()。只有在輸入新的時才能正常工作。當編輯現有的電話財產已經填寫,刪除所有電話字段(這應該是有效的)不會導致有效的提交。

this solution有一個驗證回調函數驗證工作有一些修改爲symfony1.2 3:

/** 
* 
* @Assert\Callback() 
*/ 
public function validatePhone(ExecutionContextInterface $context) 
{ 
    if (/* Fields are not empty */) 
    { 
     $context->getValidator()->inContext($context)->validate($this->phone); 
    } 
} 

但提交表單後,爲手機領域驗證錯誤的網頁上沒有顯示。我只能在調試工具欄中看到它們。

也許,這個解決方案需要以某種方式修改,以便在表單提交後顯示錯誤?

但甚至我的第一種方法可能會奏效,如果它是某種可以設置該屬性電話現有對象爲空的,如果電話的所有表單域已被清除?

回答

0

嘗試使用cascade_validation(be carefull removed from symfony3)和error_bubbling在formType類

->add('phone', 'collection', array(
      'type' => 'text', 
      'allow_add' => true, 
      'error_bubbling' => false, 
      'cascade_validation' => true, 
     )); 
0

找到自己的答案:

other post我爲了做出的解決方案的修改嘗試讓它爲Symfony 3.3工作需要有所不同:

/** 
* 
* @Assert\Callback() 
*/ 
public function validatePhone(ExecutionContextInterface $context) 
{ 
    if (/* Fields are not empty */) 
    { 
     $context->getValidator()->validate($this->phone); 
    } 
}