Symfony 表单类型从另一个实体添加查询构建器

Posted

技术标签:

【中文标题】Symfony 表单类型从另一个实体添加查询构建器【英文标题】:Symfony formtype add query builder from another entity 【发布时间】:2021-09-03 03:53:55 【问题描述】:

有人知道我是否可以将 sql 查询放入表单类型中吗? 我创建了一个函数,现在我想在构建器中调用它,但它要求我传递一个参数

 public function hoursCalendar(ParametresRepository $repoParam)

        $hours = $repoParam->find(1);
        $minHours = $hours->getCalendarStartTime();
        $maxHours = $hours->getCalendarEndTime();
        $range = range($minHours , $maxHours);

        return $range;

     


    public function buildForm(FormBuilderInterface $builder, array $options)
    
       
            $this->hoursCalendar();

            $var = 15;  

        $builder
            ->add('title')
            ->add('start', DateTimeType::class, [
                'date_widget' => 'single_text',
                'time_widget' => 'choice',
                'hours' => range( $var, 18),
                'minutes' => [ 0, 5, 10, 15, 20, 25, 30, 35, 40, 45, 50, 55
                ],
            ])
            ->add('end', DateTimeType::class, [
                'date_widget' => 'single_text',
                'time_widget' => 'single_text'
            ])
            ->add('description')
            ->add('resource')
            ->add('all_day')
            ->add('background_color', ChoiceType::class, array(
                'label' => false,
                'placeholder' => 'Type de RDV',
                'choices' => array(
                    'Client' => "#800000",
                    'Formation' => "#ADD8E6"),
                    ))
            ->add('border_color', ChoiceType::class, array(
                'label' => false,
                'placeholder' => 'User',
                'choices' => array(
                    'Bart' => "#000000",
                    'Loic' => "#00FF00"),
                    ))
            ->add('text_color', ColorType::class)
            

        ;
    

最后,我要做的是将我拥有的信息放入 calendarStartTime 和 calendarEndTime 以替换“小时”范围内的值:范围(calendarStartTime,calendarEndTime),

谢谢

【问题讨论】:

在构造函数中注入ParametresRepository就可以了 【参考方案1】:

在构造函数中注入ParametresRepository

private $repoParam;

public function __construct(ParametresRepository $repoParam)

    $this->repoParam = $repoParam;

那么hoursCalendar中的参数就不需要了:

public function hoursCalendar()

    $hours = $this->repoParam->find(1);
    $minHours = $hours->getCalendarStartTime();
    $maxHours = $hours->getCalendarEndTime();
    $range = range($minHours , $maxHours);

    return $range;
 

【讨论】:

以上是关于Symfony 表单类型从另一个实体添加查询构建器的主要内容,如果未能解决你的问题,请参考以下文章

Symfony2 将自定义字段添加到表单构建器

如何使用查询构建器将转换器与实体类型表单一起使用

symfony2 构建表单实体 oneToMany

将 TINYINT 添加到 Doctrine SQL 类型

Symfony 3 / sonata_type_collection 更改查询每个添加行

如何向 symfony 2 表单添加一些额外的数据