<?php
namespace App\Validator\Constraints;
use App\DTO\SignupDTO;
use Symfony\Component\Validator\Constraint;
use Symfony\Component\Validator\ConstraintValidator;
class ConfirmPasswordValidator extends ConstraintValidator
{
private $signupFormPassword;
public function __construct(SignupDTO $signupFormPassword)
{
$this->signupFormPassword = $signupFormPassword;
}
public function validate($value, Constraint $constraint)
{
if ($this->signupFormPassword->getPassword($value) != $this->signupFormPassword->getConfirmPassword($value))
{
$this->context->buildViolation($constraint->message)
->setParameter('{{ value }}', $value)
->addViolation();
}
}
}
аргумент $value принимает значение только первого свойства. Как правильно применить это ко второму свойству?
Ответ был найден собственно в самой документации symfony. Ссылка, https://symfony.com/doc/current/validation/custom_constraint.html#class-constraint-validator
Прежде всего, нужно было добавить метод getTargets() к Constraint.class, который может иметь весь класс в качестве своей области действия:
<?php
namespace App\Validator\Constraints;
use Symfony\Component\Validator\Constraint;
/**
* @Annotation
*/
class ConfirmPassword extends Constraint
{
public $message = 'Поле пароль не совпадает с полем подтверждения пароля.';
public function validatedBy()
{
return \get_class($this).'Validator';
}
public function getTargets()
{
return self::CLASS_CONSTRAINT;
}
}
При этом метод валидатора validate() получает объект в качестве первого аргумента:
<?php
namespace App\Validator\Constraints;
use Symfony\Component\Validator\Constraint;
use Symfony\Component\Validator\ConstraintValidator;
class ConfirmPasswordValidator extends ConstraintValidator
{
public function validate($value, Constraint $constraint)
{
if ($value->getPassword() != $value->getConfirmPassword())
{
$this->context->buildViolation($constraint->message)
->atPath('password')
->addViolation();
}
}
}
Валидатор ограничения класса применяется к самому классу, а не к свойству:
<?php
namespace App\DTO;
use JMS\Serializer\Annotation\Type;
use App\Validator\Constraints as ConfirmAssert;
use Symfony\Component\Validator\Constraints as Assert;
/**
* @ConfirmAssert\ConfirmPassword
*/
final class SignupDTO
{
}
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Как в тексте одним выражением найти все ссылки содержащие "php" Ссылки могут быть как с href, так и просто в тексте
У меня есть проектСоздал папку api, сервер настроил так, что по адресу