Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/clojure/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Symfony 如何仅在满足所有约束的情况下调用断言回调方法?_Symfony_Callback_Symfony 2.1_Validation - Fatal编程技术网

Symfony 如何仅在满足所有约束的情况下调用断言回调方法?

Symfony 如何仅在满足所有约束的情况下调用断言回调方法?,symfony,callback,symfony-2.1,validation,Symfony,Callback,Symfony 2.1,Validation,我有一个带有断言回调方法“processSignup”的实体帐户。我只想在登录约束和密码约束成功时调用“processSignup”。我如何在我的processSignup方法中检查此项 <?php namespace MyProject\Bundle\FrontBundle\Entity; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\Validator\ExecutionContext; use

我有一个带有断言回调方法“processSignup”的实体帐户。我只想在登录约束和密码约束成功时调用“processSignup”。我如何在我的processSignup方法中检查此项

<?php
namespace MyProject\Bundle\FrontBundle\Entity;

use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\Validator\ExecutionContext;
use Symfony\Component\Validator\Constraints as Assert;

/**
 * @Assert\Callback(methods={"processSignup"})
 */
class Account
{

    /**
     * @Assert\NotBlank()
     * @Assert\Type(type="string")
     * @Assert\Length(min = 6, max = 16)
     */
    protected $login;

    /**
     * @Assert\NotBlank()
     * @Assert\Type(type="string")
     * @Assert\Length(min = 8, max = 12)
     */
    protected $password;

    /**
     * @param ExecutionContext $context
     */
    public function processSignup(ExecutionContext $context)
    {
        // if login and password constraints success, do something
    }

    public function getLogin()
    {
        return $this->login;
    }

    public function setLogin($login)
    {
        $this->login = $login;
    }

    public function getPassword()
    {
        return $this->password;
    }

    public function setPassword($password)
    {
        $this->password = $password;
    }
}

在相同的情况下,我使用了验证组:

/** @Assert\Callback(methods={"processSignup"}, groups={"LastValidation"}) */
class Account {
    /**
     * @Assert\NotBlank()
     * @Assert\Type(type="string")
     * @Assert\Length(min = 6, max = 16)
     */
    protected $login;
....
}
并以表格形式:

class AccountType extends AbstractType {
   public function buildForm(FormBuilderInterface $builder, array $options)
   {
       ....
   }

public function setDefaultOptions(OptionsResolverInterface $resolver)
{
    parent::setDefaultOptions($resolver);
    $resolver->setDefaults(
            [
            ....
            'validation_groups' => function (FormInterface $form)
                    {
                        return ['Account', 'LastValidation'];
                        // The first element's value must be the same as data-class name
                    }
            ]
    );

}
然后在processSignup方法中,您可以检查

    if(0 !== $context->getViolations()->count())
    {
        return;
    }

在相同的情况下,我使用了验证组:

/** @Assert\Callback(methods={"processSignup"}, groups={"LastValidation"}) */
class Account {
    /**
     * @Assert\NotBlank()
     * @Assert\Type(type="string")
     * @Assert\Length(min = 6, max = 16)
     */
    protected $login;
....
}
并以表格形式:

class AccountType extends AbstractType {
   public function buildForm(FormBuilderInterface $builder, array $options)
   {
       ....
   }

public function setDefaultOptions(OptionsResolverInterface $resolver)
{
    parent::setDefaultOptions($resolver);
    $resolver->setDefaults(
            [
            ....
            'validation_groups' => function (FormInterface $form)
                    {
                        return ['Account', 'LastValidation'];
                        // The first element's value must be the same as data-class name
                    }
            ]
    );

}
然后在processSignup方法中,您可以检查

    if(0 !== $context->getViolations()->count())
    {
        return;
    }

使用
$context->getViolations()
试试。它返回到目前为止我尝试过的所有冲突,但是当约束不满足时,它返回一个空数组。你是对的,但我认为这是检查约束是否成功的唯一方法。尝试触发用户名和密码约束,并检查数组是否为空。您可以使用Xdebug的var_dump and die:)尝试使用
$context->getViolations()
。它返回到目前为止我尝试过的所有冲突,但是当约束不满足时,它返回一个空数组。你是对的,但我认为这是检查约束是否成功的唯一方法。尝试触发用户名和密码约束,并检查数组是否为空。您可以使用Xdebug的var_dump and die:)实现这一点