我对实体中的属性使用@AssertChoice
验证。
ApplicationQuestion.php
<?php
/**
* ApplicationQuestion
*
* @ORMTable(name="j_application_questions")
* @ORMEntity(repositoryClass="JobsBundleRepositoryApplicationQuestionRepository")
* @ExclusionPolicy("all")
*/
class ApplicationQuestion
{
/**
* @var int
*
* @ORMColumn(name="id", type="integer")
* @ORMId
* @ORMGeneratedValue(strategy="AUTO")
* @Expose()
*/
private $id;
/**
* @var string
* @Column(type="string", length=20)
* @AssertChoice(choices={"free_text","boolean", "multiple_choice", "video"}, message="Choose a valid answer type")
* @Expose()
*/
protected $answer_type;
}
从ApplicationQuestionRepository
创建新的ApplicationQuestion
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);
但不确定如何将CCD_ 9服务注入到定制存储库中。
感谢
最好创建一个使用实体管理器和验证器服务作为依赖项的服务。可以称之为ApplicationQuestionService或类似的服务。
然后,您就拥有了验证和保存问题所需的所有依赖项。
或者,你可以看看工厂:http://symfony.com/doc/current/components/dependency_injection/factories.html