如何访问Symfony中自定义存储库中的验证程序服务



我对实体中的属性使用@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

相关内容

  • 没有找到相关文章

最新更新