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("Namespace\JobBundle\Entity\Job");
и $metadata
должны иметь данные, которые вы ищете
Symfony 2.3 и выше
$metadata = $this->container
->get('validator')
->getMetadataFor("Namespace\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());
Метаданные объекта $теперь содержат все метаданные о проверках, которые относятся к вашей конкретной сущности.