【问题标题】:Symfony 2 Entity Validation Callback not being called未调用 Symfony 2 实体验证回调
【发布时间】:2015-05-16 05:38:34
【问题描述】:

谁能帮我弄清楚为什么我的回调验证方法没有被调用。

基本上我需要做的是具有以下逻辑的自定义验证: - 在表格中,我有 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 在被扩展的类中找到。

提前谢谢你。

【问题讨论】:

  • 您是否在控制器中调用了 isValid() ?来自您的控制器的代码会有所帮助!
  • 检查您是否为 ExecutionContextInterface 类添加了 use 语句
  • @Matteo.....我确认包括使用
  • @PMoubed...是的,我已经调用了 isValid code if ($form->isSubmitted() && $form->isValid()) code
  • 表单有validation_groups?

标签: validation symfony assert


【解决方案1】:

回调注解需要(如果已定义)关联的验证组。

作为示例,在不同表单上下文中使用的实体具有特定表单的验证自定义:

实体类:

/**
 *
 * @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')
        ));
    }

【讨论】:

  • 感谢@Matteo,将验证这一点并尽快回复。
  • 显然它与表单有关,因为我刚刚收到一个错误报告,在另一个使用实体的表单上,验证失败并显示错误。很奇怪,不知道为什么,YET。
猜你喜欢
  • 2018-02-22
  • 1970-01-01
  • 2014-09-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-08-10
  • 2012-06-27
相关资源
最近更新 更多