2016-04-20 102 views
0

我正在使用@Assert\Choice验证实体中的属性。如何访问Symfony中自定义存储库中的验证器服务

ApplicationQuestion.php

<?php 

/** 
* ApplicationQuestion 
* 
* @ORM\Table(name="j_application_questions") 
* @ORM\Entity(repositoryClass="JobsBundle\Repository\ApplicationQuestionRepository") 
* @ExclusionPolicy("all") 
*/ 
class ApplicationQuestion 
{ 
    /** 
    * @var int 
    * 
    * @ORM\Column(name="id", type="integer") 
    * @ORM\Id 
    * @ORM\GeneratedValue(strategy="AUTO") 
    * @Expose() 
    */ 
    private $id; 

    /** 
    * @var string 
    * @Column(type="string", length=20) 
    * @Assert\Choice(choices={"free_text","boolean", "multiple_choice", "video"}, message="Choose a valid answer type") 
    * @Expose() 
    */ 
    protected $answer_type; 

} 

创建一个新ApplicationQuestionApplicationQuestionRepository

ApplicationQuestionRepository.php

<?php 
class ApplicationQuestionRepository extends EntityRepository 
{ 
    /** 
    * @param $data 
    * @param Job $job 
    * @return bool|ApplicationQuestion 
    */ 
    private function createNewQuestion($data, Job $job) 
    { 
     if($data['answer_type'] == 'multiple_choice' && !array_key_exists('answer_choices', $data)){ 
      return false; 
     } 

     $question = new ApplicationQuestion(); 
     $question 
      ->setJob($job) 
      ->setQuestion($data['question']) 
      ->setAnswerType($data['answer_type']) 
      ->setQuestionFor('job_application') 
      ; 
     if($data['answer_type'] == 'multiple_choice') 
      $question->setAnswerChoices($data['answer_choices']); 

     return $question; 
    } 

} 

如何去我访问validator服务之前,插入验证了assert条件。所以,想要做这样的事情在ApplicationQuestionRepository

$this->get('validator')->validate($question); 

,但不知道如何注入定制仓库里validator服务。

感谢

回答

相关问题