Symfony验证多个实体和相关实体

时间:2015-11-18 12:53:27

标签: validation symfony doctrine entity

仅使用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 ...

我想再次验证本公司和用户。我可以用前面提到的类似方式做到这一点。但同样,问题出现了,是否存在传递现有错误的方法,或者让验证者验证相关实体(可能与验证组一起?)

谷歌搜索这个问题几乎没有给我任何好的结果,所以我希望有人可以指出我正确的方向。

或者我应该自己实现这样的逻辑(这不是问题),我只是想阻止重写这样的逻辑,如果它已经存在。

提前致谢!

1 个答案:

答案 0 :(得分:0)

如果要验证相关实体,请使用@Valid注释。

如果要一次性验证实体数组,则一个解决方案可能是另一个包含此数组和@Valid注释的集合的类。关键是你不需要表单来验证对象,也不需要doctrine实体。只是带有验证注释的普通旧PHP对象。

如果您有其他对象类,则可以动态创建约束并通过集合传递给验证器服务。在Symfony文档的ScalaDocs章节中,您可以找到详细信息(第二个示例)。