我正在做一个使用一些 Symfony 组件的项目。我的问题是如何让表单组件对表单的验证使用 AnnotationMapping 来查找约束。
设置:
global $loader; //composer - autoload
AnnotationRegistry::registerLoader([$loader, 'loadClass']);
$validator = Validation::createValidatorBuilder()
->enableAnnotationMapping()
->getValidator();
$formFactory = Forms::createFormFactoryBuilder()
[...]
->addExtension(new ValidatorExtension($validator))
->getFormFactory();
实体
/**
* @ORM\Entity
* @ORM\Table(name="..")
*/
class Conductor extends AbstractEntity {
/**
* @ORM\Id
* @ORM\Column(type="integer")
* @ORM\GeneratedValue
*/
protected $id;
/**
* @Assert\NotBlank()
* @ORM\Column(type="string")
*/
protected $pattern;
[...]
}
构建表单
$builder = $App->getFormFactory()->createBuilder(FormType::class, $entity_data);
foreach ($fields as $field) {
$builder->add(
$field,
null,
[
"attr" => array("class" => "..."),
]
);
}
$builder->getForm();
表单提交/验证
if($request->isMethod('POST')) {
$formTable = $this->createFormTable( array() );
$form = $formTable->buildForm($entity);
$form->submit($this->dataMapper->formDataFromPost());
/*
$entity = $this->dataMapper->mapFromPost();
$validator = Validation::createValidatorBuilder()
->enableAnnotationMapping()
->getValidator();
*/
if($form->isValid()) {
[...]
} else {
[...]
}
}
我试图使 NotBlank() 约束工作。但是我的表单无论如何都通过了验证。如果我使用新的验证器并使用它进行验证,它将向我显示正确的错误。但是 Form->isValid() 函数没有。也许它没有正确配置为使用 AnnotationMapping?非常感谢您提前提供提示或解决方案!
问题定位
表单处理请求/提交和验证按预期工作!
表格没有任何限制!! -> 从注释映射约束没有发生/工作。
我确实发现了一个类似的问题:为什么 Symfony 表单不使用约束注释验证我的 DTO?