Symfony使用选择字段嵌入表单

时间:2016-12-17 19:40:15

标签: php forms symfony

我在另一个名为ClientTarifaType的内嵌ClientType。嵌入式表单(ClientTarifaType)只有一个选择字段,其中Tarifas已经存在(ClientTarifa具有ManyToMany关系)。

ClientType.php

        ->add('tarifas', CollectionType::class, array(
            'entry_type'   => ClientTarifaType::class,
            'allow_add'    => true,
            'allow_delete' => true,
            'by_reference' => false
        ))

ClientTarifaType.php

    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder
            ->add('nombre', EntityType::class, array(
                'class' => 'AppBundle:Tarifa',
                'label' => 'Tarifa asociada a este cliente',
                'placeholder' => 'Elige tarifa...',
            ));
    }

    public function configureOptions(OptionsResolver $resolver)
    {
        $resolver->setDefaults(array(
            'data_class' => 'AppBundle\Entity\Tarifa',
        ));
    }

提交时出现问题,因为发送的表单数据也出现在Tarifa实体字段内的Tarifa实体(同一类型的另一个实体内部!),如下所示:

Tarifa {#1050 ▼
  -id: null
  -clientes: null
  -plaza: null
  -mercancia: null
  -envios: ArrayCollection {#1054 ▶}
  -pesos: array:27 [▶]
  -codigo: null
  -nombre: Tarifa {#1070 ▼
    -id: 1
    -clientes: PersistentCollection {#1076 ▶}
    -plaza: Plaza {#1129 ▶}
    -mercancia: null
    -envios: PersistentCollection {#1183 ▶}
    -pesos: PersistentCollection {#1201 ▶}
    -codigo: "00001"
    -nombre: "Canarias"
  }
}

我认为问题是我有Tarifa类型的字段,data_class也是Tarifa类型。如何将select字段仅包含nombre和id属性?在此先感谢,欢迎任何帮助!

1 个答案:

答案 0 :(得分:0)

如果您只想选择一个或多个已创建的Tarifa,则不需要表单ClientTarifaType.php。 http://symfony.com/doc/current/reference/forms/types/entity.html

->add('tarifas', EntityType::class, array(
     'class' => 'AppBundle:Tarifa',
     'multiple' => true, 
     //'expanded' => true,
 ))

如果您想在同时创建客户端时创建tarifas,则需要一个表单集合:https://symfony.com/doc/current/form/form_collections.html但我认为这不是您的情况。

使用select2

进行查看
<html>
<form>
    {{ form_row(form.tarifas) }}
</form>
<script type="text/javascript"  src="{{ asset('bundles/app/js/jquery.js') }}"></script>
<script type="text/javascript"  src="{{ asset('bundles/app/js/select2.js') }}"></script>
<script type="text/javascript">
    $('#{{ form.tarifas.vars.id }}').select2();
</scrip>
</html>