仅使用Symfony验证器(无表格!),我试图找出如何验证多个实体或(子/相关)实体并在一个数组/对象中返回错误。
E.G。:
假设我有2个不同的用户实体,我想使用相同的验证组进行验证。
使用validator api docs我可以这样做:
$user1 = ... //first user
$user2 = ... //second user
$errors = [];
$error = $validator->validate($user1, null, ['create']);
if(count($error) > 0)
{
$errors['user1'] = $error;
}
$error = $validator->validate($user2, null, ['create']);
if(count($error) > 0)
{
$errors['user2'] = $error;
}
if(count($errors) > 0 )
{
// handle errors
}
这有用但是我想知道是否有这样做的构建? 就像将现有错误传递给验证器,或将实体数组传递给验证器一样。
当我想验证具有关系的实体时,会出现同样的问题。
E.G:
假设我有一个与用户实体有一对多关系的公司实体。
创建新公司时,我还会创建一个新用户。
$company = new Company();
$company->set...
$user = new User();
$user->set...
$company->addUser($user);
$validator->validate ...
我想再次验证本公司和用户。我可以用前面提到的类似方式做到这一点。但同样,问题出现了,是否存在传递现有错误的方法,或者让验证者验证相关实体(可能与验证组一起?)
谷歌搜索这个问题几乎没有给我任何好的结果,所以我希望有人可以指出我正确的方向。
或者我应该自己实现这样的逻辑(这不是问题),我只是想阻止重写这样的逻辑,如果它已经存在。
提前致谢!
答案 0 :(得分:0)
如果要验证相关实体,请使用@Valid
注释。
如果要一次性验证实体数组,则一个解决方案可能是另一个包含此数组和@Valid
注释的集合的类。关键是你不需要表单来验证对象,也不需要doctrine实体。只是带有验证注释的普通旧PHP对象。
如果您有其他对象类,则可以动态创建约束并通过集合传递给验证器服务。在Symfony文档的ScalaDocs章节中,您可以找到详细信息(第二个示例)。