【发布时间】:2020-10-16 03:31:53
【问题描述】:
如何编写自定义验证器?
例如,我有这个工作代码:
use Symfony\Component\Validator\Constraints as Assert;
use Symfony\Component\Validator\ConstraintViolationInterface;
use Symfony\Component\Validator\Validation;
$input = [
null, //fail
0, //fail
1, //fail
2, //fail
"12", //ok - string can be (at least 2 chars)
20, //ok
50 //ok
];
$constraint = new Assert\All([
// the keys correspond to the keys in the input array
new Assert\NotBlank(),
new Assert\AtLeastOneOf([
new Assert\Sequentially([
new Assert\Type(['type' => 'int']),
new Assert\GreaterThanOrEqual(20)
]),
new Assert\Sequentially([
new Assert\Type(['type' => 'string']),
new Assert\Length(2)
])
])
]);
$validator = Validation::createValidator();
$violations = $validator->validate($input, $constraint);
我想将“检查”打包到一个类中,例如:
$input = [
null, //fail
0, //fail
1, //fail
2, //fail
"12", //ok - string can be (at least 2 chars)
20, //ok
50 //ok
];
$constraint = new Assert\All(
new IdConstraint()
);
$validator = Validation::createValidator();
$violations = $validator->validate($input, $constraint);
IdContrains 或 IdValidator 类应该是什么样子?这是我到目前为止得到的:
namespace App\Constraint;
use Symfony\Component\Validator\Constraint;
class IdConstraint extends Constraint
{
public $message = 'The input "{{ string }}" contains invalid values.';
}
namespace App\Constraint;
use Symfony\Component\Validator\Constraint;
use Symfony\Component\Validator\ConstraintValidator;
class IdValidator extends ConstraintValidator
{
public function validate($value, Constraint $constraint)
{
//what to put here???
}
}
提前致谢!
【问题讨论】:
-
输入你的逻辑并在逻辑被破坏时添加违规。还有 rtfm symfony.com/doc/current/validation/custom_constraint.html
-
我已经阅读了调频,但我不知道该把逻辑放在哪里?我已经发布了工作逻辑,但不确定如何将其集成到 IdValidator 类中。这就是我寻求帮助的原因。
-
逻辑在
validate方法中。用$value做任何你想做的事。如果出现问题 - 向this->context添加/构建违规。
标签: php symfony validation