1

アサート コールバック メソッド「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;
    }
}
4

1 に答える 1

2

同じケースで、検証グループを使用しました:

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

および FormType で:

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;
    }
于 2013-11-15T13:22:39.177 に答える