我有一个实体机器,它与其他实体片段有关系MM。这些作品可以有3种不同的类型。目前,表单机器是使用选择列表构建的,其中获取整个数组集合Machine.pieces。我的想法是使用Machine.pieces的子集构建3个不同的选择列表。
我尝试了两种不同的方法,但我无法完成它。
使用方法
的MachineRepository
类
public function findPiecesByPieceType($pieceTypeID)
返回正确的query->getResult()
。
然后我在MachineType中添加了一个choiceType,但我无法从MachineController
填充它。我使用$form->get('pieces')->setData($arrcollectPieces)
和其他方法来添加选项,但我总是得到错误。
如何将控制器中的选项添加到表单?
在表单中我使用了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);
},
)
)
这有效,但当我尝试添加更多queryBuilders(->add('pieces2'
等等)时,我有错误,因为
属性pieces2
和方法getPiecess2()
,pieces2()
,isPieces2()
,hasPieces2()
,__get()
都不存在,在课程AppBundle\Entity\Machine
中有公开访问权限。
如何以这种方式使用不受方法名约束的各种queryBuilders?
也许两种方法都不正确,我应该以不同的方式解决这个问题?
答案 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'];