13

エンティティのすべての検証制約を取得するメソッドに取り組んでいます(私が達成しようとしているのは、このデータをJSONで返し、JQuery検証プラグインを使用してクライアント側に同じ制約を適用することです)が、制約を取得するのに問題があります、これが私の現在のコードです:

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

$ metadataで取得するのは、制約属性の空の配列で、残りは($propertiesと$membersにはエラーメッセージのみがありますが、実際の制約(たとえば、required、integer ...)はありません)。

何が間違っているのですか?

4

2 に答える 2

18

新しいクラスのメタデータをインスタンス化する代わりに、おそらくバリデーターサービスを使用します。一部のクラスがサービスを通じて初期化されているかどうかはわかりません。

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

そして$metadataあなたが探しているデータを持っている必要があります

Symfony2.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 に答える