您可以Chain
为此目的使用验证器:https ://gist.github.com/rybakit/4705749
这是一个简单的 PHP 示例:
<?php
use Symfony\Component\Validator\Constraints\Date;
use Symfony\Component\Validator\Constraints\Type;
use Acme\Validator\Constraints\Chain;
$constraint = new Chain([new Type('string'), new Date()]);
在 XML 中:
<!-- src/Acme/DemoBundle/Resources/config/validation.xml -->
<class name="Acme\DemoBundle\Entity\AcmeEntity">
<property name="date">
<constraint name="Acme\Validator\Constraints\Chain">
<option name="constraints">
<constraint name="Type">
<option name="type">string</option>
</constraint>
<constraint name="Date" />
</option>
</constraint>
</property>
</class>
但请注意,如果您想要嵌套Chain
约束,例如:
<?php
$constraint = new Chain([
new Callback(...),
new Chain([new Type('string'), new Date()]),
]);
您必须覆盖validator.validator_factory
symfony 服务来解决在当前实现中处理嵌套约束的问题:https ://github.com/symfony/Validator/blob/fc0650c1825c842f9dcc4819a2eaff9922a07e7c/ConstraintValidatorFactory.php#L48 。
查看NoCacheConstraintValidatorFactory.php
gist 中的文件以了解如何解决它。