13

我正在研究一种获取实体的所有验证约束的方法(我想要实现的是以 JSON 格式返回此数据并使用 JQuery Validation Plugin 在客户端应用相同的约束),但是我在获取约束时遇到了一些麻烦,这是我当前的代码:

    $metadata = new \Symfony\Component\Validator\Mapping\ClassMetadata("Namespace\JobBundle\Entity\Job");
    $annotationloader = new AnnotationLoader(new AnnotationReader());
    $annotationloader->loadClassMetadata($metadata);

我在 $metadata 中得到的是约束属性的空数组,其余的($properties 和 $members 只有错误消息......但没有实际约束(例如:必需,整数......))。

我做错了什么?

4

2 回答 2

18

我可能会使用验证器服务而不是实例化新的类元数据。你永远不知道某些类是否是通过服务初始化的。

$metadata = $this->container
                 ->get('validator')
                 ->getMetadataFactory()
                 ->getClassMetadata("Name‌​space\JobBundle\Entity\Job");

并且$metadata应该有您正在寻找的数据

Symfony 2.3 及更高版本

$metadata = $this->container
                 ->get('validator')
                 ->getMetadataFor("Name‌​space\JobBundle\Entity\Job");
于 2013-03-19T15:25:54.500 回答
7
private function getValidations()
    {
        $validator=$this->get("validator");
        $metadata=$validator->getMetadataFor(new yourentity());
        $constrainedProperties=$metadata->getConstrainedProperties();
        foreach($constrainedProperties as $constrainedProperty)
        {
            $propertyMetadata=$metadata->getPropertyMetadata($constrainedProperty);
            $constraints=$propertyMetadata[0]->constraints;
            foreach($constraints as $constraint)
            {
                //here you can use $constraint to get the constraint, messages etc that apply to a particular property of your entity
            }
        }
    }

$validator=$this->get("validator");
$metadata=$validator->getMetadataFor(new yourentity());

对象 $metadata 现在包含有关与您的特定实体有关的验证的所有元数据。

于 2013-04-26T05:03:41.143 回答