我有一个使用 FormServiceProvider 和 ValidatorServiceProvider 的 Silex 项目。我使用 form.factory 构建器制作了一个表单,添加了字段,并使用一个对象作为数据集:
$form = $app['form.factory']->createBuilder('form', $object)
然后我尝试以“正常方式”验证提交表单:
if ($app['request']->getMethod() == 'POST') {
$form->bind($app['request']);
if ($form->isValid()) {
(...)
}
}
在对象中,我添加了一个 loadValidatorMetadata 静态方法:
static public function loadValidatorMetadata(ClassMetadata $metadata) {
$metadata->addPropertyConstraint('name', new Assert\MinLength(5, array('message' => 'Name too short')));
}
当我提交具有较短名称字段的表单时,isValid 仍然返回 true。如果我像这样在对象上运行验证方法:
$errors = $app['validator']->validate($object)
它根据约束返回一个错误,但表单 isValid 没有发现这个错误。当我查看 symfony Form 类时,我发现当禁用配置为 true 时,isValid 会跳过检查子字段。我的表格就是这种情况,但我不知道为什么。我刚刚以正常方式注册了 Silex 服务提供商,没有任何特殊配置。知道如何根据对象约束使表单验证失败吗?