我在另一个名为ClientTarifaType
的内嵌ClientType
。嵌入式表单(ClientTarifaType
)只有一个选择字段,其中Tarifas已经存在(Client
和Tarifa
具有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属性?在此先感谢,欢迎任何帮助!
答案 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>