Symfony2表单:选择一个实体或添加一个新实体

Sim*_*sne 24 forms symfony

我有order一个client实体.

我想知道是否可以使用实际的Symfony2表单系统创建一个订单表单,该表单允许:

  1. 从下拉列表中选择多个客户端(混合collectionentity表单类型)
  2. collection如果不在下拉列表中,则动态创建新客户端(类型的默认方式).

我已经看到了通过在同一页面中创建多个表单来实现它的一些方法,但这不是我想要实现它的方式.

有没有更好的方法来做到这一点?

Pat*_*ick 7

我遇到了类似的问题,可能导致您的解决方案:

我有一个类别和项目关系(多对一),我想要选择现有项目或创建一个新项目.

在我的Form类中:

    $builder->add('item', 'entity', array(
        'label' => 'Item',
        'class' => 'ExampleItemBundle:Item',
    ));

    $builder->add('itemNew', new EmbedItemForm(), array(
        'required' => FALSE,
        'mapped' => FALSE,
        'property_path' => 'item',
    ));

    $builder->addEventListener(FormEvents::PRE_SUBMIT, function(FormEvent $event) {
        $data = $event->getData();
        $form = $event->getForm();

        if (!empty($data['itemNew']['name'])) {
            $form->remove('item');

            $form->add('itemNew', new EmbedItemForm(), array(
                'required' => TRUE,
                'mapped' => TRUE,
                'property_path' => 'item',
            ));
        }
    }); 
Run Code Online (Sandbox Code Playgroud)

  • 需要使用EmbedItemForm :: class作为类型是字符串| null,因为symfony 3(也许是2.?)的add方法. (2认同)

Alt*_*PHP 0

表单collection类型允许使用allow_addallow_delete属性动态添加和删除。

通过以下两个链接了解更多信息:

如果您不喜欢在同一页面上获得补充表单,您可以将它们集成在对话框中...但是您肯定需要一个表单来创建新项目...

  • 我相信这并不能回答最初的问题,对我来说,这个问题是:是否有一种优雅的方式将现有或新对象添加到集合中?我不明白为什么这个答案被接受。 (4认同)
  • 感谢您的回答。我知道“集合”类型。但我感觉我可以添加和删除现有客户端,或者添加和删除新客户端,但不能以相同的形式添加现有客户端并创建新客户端(例如)。我错了吗 ?我希望一切都清楚。 (2认同)