Ich benutze Symfony 2.8 und FOSUser Bundle 2.0 für meine Benutzerverwaltung. Ich versuche, einen benutzerdefinierten Validator für das Telefonnummernfeld ohne Erfolg zu erstellen.Symfony2 FOSUser benutzerdefinierte Validierung funktioniert nicht
Dies ist mein Code:
UserBundle/Ressourcen/config/validation.xml
<class name="Acme\UserBundle\Entity\User">
<property name="phoneNumber">
<constraint name="Acme\UserBundle\Validator\Constraint\IsConfirmedPhonenumber">
<option name="groups">
<value>Acme</value>
</option>
</constraint>
</property>
</class>
Service-Definition
<service class="Acme\UserBundle\Validator\Constraint\IsConfirmedPhonenumberValidator" id="acme_user.validator.is_confirmed_phonenumber_validator">
<argument id="doctrine.orm.default_entity_manager" type="service"/>
<tag name="acme.constraint_phonenumber"/>
</service>
Auf meinem Formulartyp
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults(array(
'data_class' => 'Acme\UserBundle\Entity\User',
'intention' => 'profile',
));
}
Meine benutzerdefinierte Konst Raint
class IsConfirmedPhonenumber extends Constraint
{
public $message = 'The phonenumber "%phonenumber%" is not verified.';
public function validatedBy()
{
return "acme.constraint_phonenumber";
}
}
Und Validator
class IsConfirmedPhonenumberValidator extends ConstraintValidator
{
/**
* @var EntityManager
*/
private $em;
public function __construct(EntityManager $em)
{
$this->em = $em;
}
/**
* Checks if the passed value is valid.
*
* @param mixed $value The value that should be validated
* @param Constraint $constraint The constraint for the validation
*/
public function validate($value, Constraint $constraint)
{
$phoneVerificationRepo = $this->em->getRepository('AcmeCoreBundle:PhoneVerification');
$phoneVerificationRepo->findBy(array('phoneNumber' => $value, 'verified' => true));
if(!$phoneVerificationRepo)
{
$this->context->buildViolation($constraint->message)
->setParameter('%phonenumber%', $value)
->addViolation();
}
return;
}
}
Diese Konfiguration ist für mich nicht nie aufgerufen wird, in meinem benutzerdefinierten Validator seit Validate-Methode arbeiten.
Haben Sie den Cache ordnungsgemäß gelöscht? Änderungen an "validation.xml" müssen im Allgemeinen neu kompiliert werden, um Effekte zu erzielen. –
Ja, mehrere Male: D – 3ND