Php Symfony 5约束验证:自定义错误消息
我想使用SF 4.3上发布的新NotConvertized密码: 我已经在验证中设置了它。yaml如下:Php Symfony 5约束验证:自定义错误消息,php,symfony,validation,Php,Symfony,Validation,我想使用SF 4.3上发布的新NotConvertized密码: 我已经在验证中设置了它。yaml如下: App\Entity\User: constraints: - App\Validator\Constraints\ConstraintPassword: ~ properties: plainPassword: - Symfony\Component\Validator\Constraints\NotCompromi
App\Entity\User:
constraints:
- App\Validator\Constraints\ConstraintPassword: ~
properties:
plainPassword:
- Symfony\Component\Validator\Constraints\NotCompromisedPassword: ~
它可以工作,但我想自定义错误消息,例如,直接在ConstraintPasswordValidator.php上使用它:
<?php
namespace App\Validator\Constraints;
use App\Entity\User;
use Symfony\Component\Validator\Constraint;
use Symfony\Component\Validator\Constraints\NotCompromisedPassword;
use Symfony\Component\Validator\ConstraintValidator;
class ConstraintPasswordValidator extends ConstraintValidator
{
/**
* @param User $user
* @param Constraint $constraint
*/
public function validate($user, Constraint $constraint)
{
if (strlen($user->getPlainPassword()) < 8 || strlen($user->getPlainPassword() < 35)) {
$this->context->buildViolation($constraint->lengthError)
->addViolation();
}
// Doing something like that
$notCompromised = new NotCompromisedPassword();
$notCompromised->message = "My custom error message";
//Then, build the violation if password leaked
}
}
您可以在validation.yaml上传递消息
选项
App\Entity\User:
properties:
plainPassword:
- Symfony\Component\Validator\Constraints\NotCompromisedPassword:
message: "You error message"
但是,如果要将约束验证到验证器中,可以使用:
class MyValidator extends ConstraintValidator
{
public function validate($value, Constraint $chain)
{
// Previous check...
$groups = $this->context->getGroup();
$violations = $this->context->getViolations();
$current = $violations->count();
// Execute the new constraint
$this->context->getValidator()
->inContext($this->context)
->validate($value, new MyOtherConstraint(), $groups);
// Check if the constraint has failed
if ($violations->count() !== $current) {
return;
}
}
}
class MyValidator extends ConstraintValidator
{
public function validate($value, Constraint $chain)
{
// Previous check...
$groups = $this->context->getGroup();
$violations = $this->context->getViolations();
$current = $violations->count();
// Execute the new constraint
$this->context->getValidator()
->inContext($this->context)
->validate($value, new MyOtherConstraint(), $groups);
// Check if the constraint has failed
if ($violations->count() !== $current) {
return;
}
}
}