2015-03-13 3 views
2

Может ли кто-нибудь помочь мне выяснить, почему мой метод проверки обратного вызова не вызывается.Symfony 2 Подтверждение сущности Обратный звонок не называется

В основном то, что мне нужно сделать, это обычай проверка со следующей логикой: - в виде у меня есть 5 полей, если все пусто, то форма должна быть действительной, - однако, если какое-либо из не пусто все им нужно не быть пустым (они используются для построения реального адреса на профиле пользователя)

я следовал документ от: 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

+0

проверить, что вы добавили оператор 'use' для класса ExecutionContextInterface – Matteo

+0

@Matteo ..... Я подтверждаю, что в нем используется использование –

ответ

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, проверит это и вернется с ответом как можно скорее. –

+0

Очевидно, что это имеет какое-то отношение к форме, так как я только что получил сообщение об ошибке, что в другой форме, использующей сущность, проверка не выполняется и отображает ошибку. Очень странно и не знаю причины, почему. –

+0

, так что ваш код работает как вы отправили? – Matteo

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