2015-03-13 60 views
2

有人可以幫我找出爲什麼我的回調驗證方法沒有被調用。Symfony 2實體驗證回調不被稱爲

基本上我需要做的就是用下面的邏輯定義驗證: - 形式我有5場,如果所有空,形式應該是有效的, - 但是如果任何不爲空所有的他們需要不爲空 (它們被用來建立用戶檔案真實地址)

我按照從DOC:http://symfony.com/doc/2.3/reference/constraints/Callback.html

我有以下代碼:

/** 
* User 
* 
* @ORM\Table(name="user") 
* @ORM\Entity(repositoryClass="UserRepository"); 
* @UniqueEntity("email") 
* @ORM\HasLifecycleCallbacks 
* @Assert\Callback(methods={"isAddressValid"}) 
*/ 
class User extends WebserviceUser implements UserInterface, EquatableInterface 
{ 
... 

    public function isAddressValid(ExecutionContextInterface $context) 
    { 
     //die("I GOT HERE"); 
     $context->addViolationAt('sna4', 'Frikin validation'!', array(), null); 
    } 
} 

在正在擴展的類中找到屬性sna4。

預先感謝您。

+0

你在控制器中調用了isValid()嗎?來自你的控制器的代碼會有所幫助 – PMoubed 2015-03-13 20:35:36

+0

檢查爲'ExecutionContextInterface'類添加'use'語句 – Matteo 2015-03-14 13:52:50

+0

@Matteo .....我確認包括使用 – 2015-03-18 14:33:34

回答

3

回調註釋要求(如果有的話)定義關聯的驗證組。

如實施例,在不同的形式上下文中使用與確認定製爲特定的形式的實體:

實體類:

/** 
* 
* @Assert\Callback(methods={"validateCommunicationEmail"}, groups={"userProfile"}) 
* @Assert\Callback(methods={"validatePreference"}, groups={"userPreference"}) 
*/ 
class AcmePreferences 
{ 

    .... 

     public function validateCommunicationEmail(ExecutionContextInterface $context) 
    { 
     if ($this->getIsCommunicationsEnabled() && ! $this->getAdministrativeCommunicationEmail()) 
     { 
      $context->addViolationAt('isCommunicationsEnabled','error.no_administrative_email_selected'); 
     } 

    } 

} 

中的頁面類型:

class AcmePreferencesType extends AbstractType 
{ 

    public function setDefaultOptions(OptionsResolverInterface $resolver) 
    { 
     $resolver->setDefaults(array(
      'data_class'=> 'Acme\DemoBundle\Entity\AcmePreferences', 
      'validation_groups' => array('userProfile') 
     )); 
    } 
+0

感謝@Matteo,將驗證這一點,並儘快回覆。 – 2015-03-19 10:57:39

+0

顯然它與表單有關,因爲我剛收到一個錯誤報告,在使用該實體的另一個表單上,驗證失敗並顯示錯誤。很奇怪,不知道爲什麼,是的。 – 2015-03-30 07:49:30

+0

所以你的代碼在你發佈的時候工作嗎? – Matteo 2015-03-30 07:58:29