使用Symfony2 buildForm()在同一实体上使用查询填充3个选择列表

时间:2016-06-06 16:44:24

标签: symfony

我有一个实体机器,它与其他实体片段有关系MM。这些作品可以有3种不同的类型。目前,表单机器是使用选择列表构建的,其中获取整个数组集合Machine.pieces。我的想法是使用Machine.pieces的子集构建3个不同的选择列表。

我尝试了两种不同的方法,但我无法完成它。

  1. 使用方法

    MachineRepository
    public function findPiecesByPieceType($pieceTypeID)
    
  2. 返回正确的query->getResult()

    然后我在MachineType中添加了一个choiceType,但我无法从MachineController填充它。我使用$form->get('pieces')->setData($arrcollectPieces)和其他方法来添加选项,但我总是得到错误。

    如何将控制器中的选项添加到表单?

    1. 在表单中我使用了queryBuilder

          ->add('pieces', EntityType::class, array(
                  'label' => 'label_pieces',
                  'class' => 'AppBundle\Entity\Piece',
                  'query_builder' => function(EntityRepository $er) {
                      return $er->createQueryBuilder('p')
                              ->where('p.pieceType = :pieceType')
                              ->setParameter('pieceType', 1);
                  },
              )
          )
      
    2. 这有效,但当我尝试添加更多queryBuilders(->add('pieces2'等等)时,我有错误,因为

      属性pieces2和方法getPiecess2()pieces2()isPieces2()hasPieces2()__get()都不存在,在课程AppBundle\Entity\Machine中有公开访问权限。

      如何以这种方式使用不受方法名约束的各种queryBuilders?

      也许两种方法都不正确,我应该以不同的方式解决这个问题?

1 个答案:

答案 0 :(得分:0)

(代表OP发布)

如何使用1。

MachineController忘记setData(),而是将arrayCollection转换为2个数组(arKeys, arValues),并将它们作为createForm()中的第3个参数发送到表单。

$form = $this->createForm(<type>, <data>, 
    array ('p_keys' => array(...), 'p_values' => array(...)));

MachineType.ConfigureOptions()我们可以获取它们

$resolver->setDefined(["p_keys",'p_values']);

,它们将在MachineType.buildForm()

中提供
$options['p_keys'];
$options['p_values'];