我尝试针对现有的模型/实体/ POPO验证提交的数据,但我无法以任何简单的方式使其工作。
所有这一切都发生在控制器动作中。
所以,我可以这样做:
$constraints = new Assert\Collection([
'username' => [new Assert\NotBlank()],
'email' => [new Assert\Email()],
]);
$violationList = $this->get('validator')->validate($request->request->all(), $constraints);
然而,在每个动作中这样做都没有意义,因为在一个类中拥有所有约束会更好。因此,验证组件允许这样做:
// All constraints are defined inside Customer class
$customer = new Customer();
$violationList = $this->get('validator')->validate($customer);
违规列表现在充满了错误,因为$ customer是一个空对象,但问题是我无法找到一种方法来使用POST中的数据并根据类中定义的约束来验证它。 / p>
可以编写额外的组件/帮助程序来获取POST数据,然后调用->setUsername()
,->setEmail()
等等,但考虑到你可以做到这一点似乎并不正确轻松将模型映射到POST数据,如果:
我是否遗漏了一些明显的东西,或者没有开箱即用的可能性?谢谢!
答案 0 :(得分:1)
AFAIK表单组件是负责将发布数据映射到您的实体的组件。所以你有两个选择
$this->get('validator')->validate($customer);
修改:
表单角色是将来自请求(html表单,api ....)的数据映射到模型。验证可以使用或不使用它作为执行工作的validator
组件,应该注意验证是在模型而不是表单上完成的。
如果你想跳过表单,请检查这个问题:Populate entity from data array without form/request虽然表单组件非常有用,特别是如果你在很多地方使用相同的逻辑(创建/编辑..)