Symfony 如何仅在满足所有约束的情况下调用断言回调方法?
我有一个带有断言回调方法“processSignup”的实体帐户。我只想在登录约束和密码约束成功时调用“processSignup”。我如何在我的processSignup方法中检查此项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
<?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:)实现这一点