Symfony - 如何将变量传递给嵌入的表单

时间:2017-07-26 09:04:30

标签: php forms symfony

我遇到了Symfony3和表单的问题。

我有一个表单,其中包含嵌入的表单。从控制器,我可以使用$ options数组($ options ['varA'],...)发送我可以在表单中使用的数据。

$form = $this->createForm(ParentEntityType::class, $objParent, array('varA'=>$varA, 'varB'=>$varB));

但是如果我想将varB变量(例如)传递给嵌入的表单呢?什么是正确的解决方案?

任何帮助将不胜感激,谢谢。

3 个答案:

答案 0 :(得分:1)

这样的东西,第一种形式:

$builder->add('name', MyFormType::class, [
            'data' => $options['varB']
]);

但是如果你分享你的表格代码会更好。主要关键是在buildForm()方法中通过$ options [' key']传递变量。

答案 1 :(得分:0)

这是2.7的正确方法 在控制器中使用此:

$itemform = $this->createForm(new SyllabusType(), $item, array('databranchid' => $branchid));

并以表格形式使用此:

    $builder
        ->add('studentclassid', 'entity', array(
            'class' =>'Schoolerp\Bundle\DBBundle\Entity\Studentclass',
            'choice_label' => 'name',
            'empty_value' => 'Choose an option',
            'query_builder'=>function(EntityRepository $e) use ( $options ){
                return $e->createQueryBuilder('u')->where('u.isactive=1')
                    ->andWhere('u.branchid = ?1')
                    ->setParameter(1, $options['databranchid']);
            }
        ))
        ->add('sectionid', 'entity', array(
            'class' =>'Schoolerp\Bundle\DBBundle\Entity\Sections',
            'choice_label' => 'name',
            'empty_value' => 'Choose an option',
            'query_builder'=>function(EntityRepository $e) use ( $options ){
                return $e->createQueryBuilder('u')->where('u.isactive=1')
                    ->andWhere('u.branchid = ?1')
                    ->setParameter(1, $options['databranchid']);
            }
        ));
/**
 * @param OptionsResolver $resolver
 */
public function configureOptions(OptionsResolver $resolver)
{
    $resolver->setDefaults(array(
        'data_class' => 'Schoolerp\Bundle\DBBundle\Entity\Syllabus',
        'databranchid' => null
    ));
}

如果使用3.0,则将输入类型替换为类类型。

答案 2 :(得分:0)

  

通过这种方式只是简单的传递值:

 $builder->add('userid', 'entity', array(
            'class' =>'DBBundle\Entity\AdminUser',
            'choice_label' => 'name',
            'query_builder'=>function(EntityRepository $e) use ( $options ){
                return $e->createQueryBuilder('u')->where('u.status=1')
                    ->andWhere('u.id = ?1')
                    ->setParameter(1, $options['users']);
            },
            'attr' => array('style'=>'display:none'),
            'label_attr' => array('style' =>'display:none')));