2016-04-20 15 views
0

Ich verwende @Assert\Choice Validierung für eine Eigenschaft in einer Entität.Zugriff auf den Validator-Service im benutzerdefinierten Repository in 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; 

} 

ein neues ApplicationQuestion von ApplicationQuestionRepository

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; 
    } 

} 

Erstellen Wie gehe ich Zugriff auf den validator Service für assert Zustand zu überprüfen, bevor das Einfügen. So wollen in ApplicationQuestionRepository, so etwas tun

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

aber nicht sicher, wie die validator Service innerhalb des benutzerdefinierten Repository zu injizieren.

Dank

Antwort

0

Besser einen Dienst zu erstellen, die das Unternehmen Manager und Ihren Validator Service als Abhängigkeit verwendet. Nennen Sie es ApplicationQuestionService oder etwas ähnliches.

Sie haben dann alle Abhängigkeiten, die Sie zum Validieren und Speichern Ihrer Frage benötigen.

Alternativ können Sie in einer Fabrik aussehen: http://symfony.com/doc/current/components/dependency_injection/factories.html

+0

Dank. Ich denke, der Service wäre eine bessere Option. Prost! – Abstract

Verwandte Themen