Symfony2.8形式CollectionType场manyTo许多
在我的模型JAI实体件及其Remplacement,关系是这样定义的:Symfony2.8形式CollectionType场manyTo许多
/**
* @var string
*
* @ORM\Column(name="Reference", type="string", length=255)
*/
private $reference;
/**
* Bidirectional
*
* @ORM\ManyToMany(targetEntity="Remplacement", inversedBy="origine",cascade="all", orphanRemoval=true)
* @ORM\JoinTable(name="piece_remplace",
* joinColumns={@ORM\JoinColumn(name="id_org", referencedColumnName="id")},
* inverseJoinColumns={@ORM\JoinColumn(name="id_gen", referencedColumnName="id")}
*)
*/
protected $generique;
/**
* @var string
*
* @ORM\Column(name="Reference_g", type="string", length=255)
*/
private $referenceG;
/**
* Bidirectional
*
* @ORM\ManyToMany(targetEntity="Piece", mappedBy="generique")
*/
protected $origine;
我CRUD symfony的工作对于Piece及其更换,来自CollectionType http://symfony.com/doc/current/cookbook/form/form_collections.html 显示件效果不错,而其余部分为:
PieceType:
<?php
namespace STM\DevisBundle\Form;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolver;
use Symfony\Bridge\Doctrine\Form\Type\EntityType;
use Symfony\Component\Form\Extension\Core\Type\TextType;
use Symfony\Component\Form\Extension\Core\Type\CollectionType;
class PieceType extends AbstractType
{
/**
* {@inheritdoc}
*/
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder->add('reference',TextType::class)
->add('type',TextType::class)
->add('marque',TextType::class)
->add('generique',CollectionType::class, array(
'entry_type' => RemplacementType::class,
'allow_add' => true,
'allow_delete' => true))
/**
* {@inheritdoc}
*/
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults(array(
'data_class' => 'STM\DevisBundle\Entity\Piece'
));
}
/**
* {@inheritdoc}
*/
public function getBlockPrefix()
{
return 'stm_devisbundle_piece';
}
}
RemplacementType:
<?php
namespace STM\DevisBundle\Form;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolver;
use Symfony\Bridge\Doctrine\Form\Type\EntityType;
use Symfony\Component\Form\Extension\Core\Type\TextType;
use Symfony\Component\Form\Extension\Core\Type\CollectionType;
class RemplacementType extends AbstractType
{
/**
* {@inheritdoc}
*/
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder->add('referenceG',TextType::class)
->add('typeG',TextType::class)
->add('marqueG',TextType::class)
->add('origine',CollectionType::class, array(
'entry_type' => PieceType::class,
'allow_add' => true,
'allow_delete' => true));
/**
* {@inheritdoc}
*/
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults(array(
'data_class' => 'STM\DevisBundle\Entity\Remplacement'
));
}
/**
* {@inheritdoc}
*/
public function getBlockPrefix()
{
return 'stm_devisbundle_remplacement';
}
}
控制器是symfony产生的
但是要做CRUD与Piece及其替换。而我失去了对集合类型 我需要你的帮助,因为它似乎很容易,但我解决不了
谢谢
让我解释一下:你有2种表单类型PieceType
和RemplacementType
在PieceType
,您添加一个入口类型为RemplacementType
的集合。 在RemplacementType
中,添加条目类型为PieceType
的集合。
二者都是allow_add
并构建原型表单。所以:
- 表单生成器建立
PieceType
(*) -
PieceType
具有收藏领域,创建原型 - 原型使用
RemplacementType
- 表单生成器建立
RemplacementType
-
RemplacementType
有一个收集场,它创建原型 - 原型使用
PieceType
- 表单生成器构建
PieceType
(*) - ..等(通知要求 - >无限形式级)
为了避免这种情况下,他们中的一个必须禁用添加另一种由加载选项:'allow_add' => false, 'prototype' => false'
感谢猪球,确切地说,你明白,但它还没有工作,当我编辑时页面什么也没有显示(空白页) –
这取决于你的控制器,你的视图以及如何在视图中呈现您的表单。让我看看你的控制器和你的观点,希望我能看到问题。 –
猪球,感谢您看到编辑和查看上面的编辑控制器,问题是,我不能显示编辑视图 –
那么到底是什么问题了吗?试着编辑你的问题,以更清楚你想要达到什么目的,以及为什么它不工作。 – Adam
谢谢,是不是工作:我不能修改和删除(CRUD)件及其替换,编辑和删除不工作,我想我认为问题出现在标准collectionType.I后面跟着http://symfony.com /doc/current/cookbook/form/form_collections.html但同样的错误 –