我花了很多时间来解决这个问题,但我没有找到正确的解决方案
我有一个可以包含多个实体地址的用户实体。用户实体的验证应该像这样运行:
- 用户必须至少有两个实体地址
- 用户必须拥有最多三个实体地址
- 地址有自己的验证约束
两个实体都有自己的 formType,Address 是 User formType 中的 CollectionType。
目前,我在我的用户控制器中创建了 3 个正确显示在视图中的地址。我使用 'Assert\Count' 和 'min=2' 来验证实体中的表单。在我的控制器中,我过滤查询以删除尚未完成的地址,然后验证表单。这种方法是不正确的。如果表格无效,我无法显示这 3 个地址,我只有已填写的地址。另外,我用 Twig 制作视图时,字段中不存在错误
理想的逻辑如下:地址经过验证,用户只考虑有效地址。用户检查其验证约束是否得到遵守,然后将用户实体存储在数据库中。很简单,对吧?(……嗯,我就是这么想的)
你有什么想法或博客文章可以解决我的问题吗?
编辑(回答评论中的问题)
在用户实体中
<?php
//...
* @Assert\Count(
* min=2,
* minMessage="user_form_not_enough_addresses",
* max=3,
* maxMessage="user_form_too_much_addresses"
* )
*/
private $addresses;
//...
在用户控制器中(当我过滤请求时)
//...
// Removing not completed addresses from request
$this->_filterRequest($request);
$userType = new UserType();
$user = new User();
$userForm = $request->get($userType->getName());
foreach ($userForm['addresses'] as $address) {
$user->getAddresses()->add(new Address());
}
$form = $this->createForm($userType, $user);
$form->bind($request);