Symfony2 получает ограничения проверки на сущность

Im, работая над методом, чтобы получить все ограничения проверки сущности (я пытаюсь добиться, это вернуть эти данные в 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 имеют только сообщения об ошибках... но не фактические ограничения (например: required, integer...)).

Что я делаю неправильно?

Ответ 1

Я, вероятно, использовал бы службу валидатора вместо создания метаданных нового класса. Вы никогда не знаете, инициализируются ли некоторые классы через службу.

$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");

Ответ 2

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());

Метаданные объекта $теперь содержат все метаданные о проверках, которые относятся к вашей конкретной сущности.