2017-04-05 57 views
0

在我的模型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 显示件效果不错,而其余部分为:

enter image description here

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及其替换。而我失去了对集合类型 我需要你的帮助,因为它似乎很容易,但我解决不了

谢谢

+0

那么到底是什么问题了吗?试着编辑你的问题,以更清楚你想要达到什么目的,以及为什么它不工作。 – Adam

+0

谢谢,是不是工作:我不能修改和删除(CRUD)件及其替换,编辑和删除不工作,我想我认为问题出现在标准collectionType.I后面跟着http://symfony.com /doc/current/cookbook/form/form_collections.html但同样的错误 –

回答

0

让我解释一下:你有2种表单类型PieceTypeRemplacementType

PieceType,您添加一个入口类型为RemplacementType的集合。 在RemplacementType中,添加条目类型为PieceType的集合。

二者都是allow_add并构建原型表单。所以:

  • 表单生成器建立PieceType(*)
  • PieceType具有收藏领域,创建原型
  • 原型使用RemplacementType
  • 表单生成器建立RemplacementType
  • RemplacementType有一个收集场,它创建原型
  • 原型使用PieceType
  • 表单生成器构建PieceType(*)
  • ..等(通知要求 - >无限形式级)

为了避免这种情况下,他们中的一个必须禁用添加另一种由加载选项:'allow_add' => false, 'prototype' => false'

+0

感谢猪球,确切地说,你明白,但它还没有工作,当我编辑时页面什么也没有显示(空白页) –

+0

这取决于你的控制器,你的视图以及如何在视图中呈现您的表单。让我看看你的控制器和你的观点,希望我能看到问题。 –

+0

猪球,感谢您看到编辑和查看上面的编辑控制器,问题是,我不能显示编辑视图 –