symfony ajax,Symfony2使用Ajax更改集合字段的类型

在我的项目Symfony2中,我有一个与实体Projet具有关系(1,n)的实体TypeConstruction。

对象TypeConstruction可以是对象Immeuble或Villa ...

所以对象Immeuble继承了对象TypeConstruction ...

实体TypeConstruction的代码:

/**

* @ORM\Entity

* @ORM\Table(name="typeconstruction")

* @ORM\InheritanceType("JOINED")

* @ORM\DiscriminatorColumn(name="typeFille", type="string")

* @ORM\DiscriminatorMap( {"typeConstruction" = "TypeConstruction", "lotissement" = "Lotissement", "immeuble" = "Immeuble", "appartement" = "Appartement", "villa" = "Villa", "piece" = "Piece"} )

*/

class TypeConstruction

{

/**

* @var integer

*

* @ORM\Column(name="id", type="integer")

* @ORM\Id

* @ORM\GeneratedValue(strategy="AUTO")

*/

private $id;

/**

* @var string

*

* @ORM\Column(name="numLot", type="string", length=255)

*/

private $numLot;

/**

* @var string

*

* @ORM\Column(name="description", type="string", length=1000)

*/

private $description;

/**

* @var float

*

* @ORM\Column(name="superficie", type="float")

*/

private $superficie;

/**

* @var float

*

* @ORM\Column(name="longueur", type="float")

*/

private $longueur;

/**

* @var float

*

* @ORM\Column(name="largeur", type="float")

*/

private $largeur;

/**

* @var float

*

* @ORM\Column(name="hauteur", type="float")

*/

private $hauteur;

/**

* @var float

*

* @ORM\Column(name="millieme", type="float")

*/

private $millieme;

/**

* @ORM\ManyToOne(targetEntity="Immo\IntervenantBundle\Entity\Proprietaire", cascade={"persist"})

* @ORM\JoinColumn(nullable=true)

*/

private $proprietaires;

/**

* @ORM\ManyToOne(targetEntity="Immo\DossierBundle\Entity\Projet", inversedBy="typeConstructions")

* @ORM\JoinColumn(nullable=false)

*/

private $projet;

private $typeFille ;

//getter setter

.....}

实体Immeuble的代码:

class Immeuble extends TypeConstruction

{

/**

* @var integer

*

* @ORM\Column(name="nbreBloc", type="integer")

*/

private $nbreBloc;

/**

* @var integer

*

* @ORM\Column(name="nbreEtage", type="integer")

*/

private $nbreEtage;

/**

* @ORM\ManyToOne(targetEntity="Immo\TypeConstructionBundle\Entity\Lotissement")

* @ORM\JoinColumn(nullable=true)

*/

private $lotissement;

/**

* @ORM\ManyToOne(targetEntity="Immo\TypeConstructionBundle\Entity\Type")

* @ORM\JoinColumn(nullable=false)

*/

private $type;

/**

* @ORM\OneToMany(targetEntity="Immo\TypeConstructionBundle\Entity\Bloc", mappedBy="immeuble")

*/

private $blocs;

...}

实体Projet的代码:

class Projet

{

/**

* @var integer

*

* @ORM\Column(name="id", type="integer")

* @ORM\Id

* @ORM\GeneratedValue(strategy="AUTO")

*/

private $id;

/**

* @var string

*

* @ORM\Column(name="Code", type="string", length=255)

*/

private $code;

/**

* @var string

*

* @ORM\Column(name="Description", type="string", length=255)

*/

private $description;

/**

* @var \DateTime

*

* @ORM\Column(name="DateDebutPrev", type="datetime")

*/

private $dateDebutPrev;

/**

* @var \DateTime

*

* @ORM\Column(name="DateFinPrev", type="datetime")

*/

private $dateFinPrev;

/**

* @var \DateTime

*

* @ORM\Column(name="DateDebutReel", type="datetime",nullable=true)

*/

private $dateDebutReel;

/**

* @var \DateTime

*

* @ORM\Column(name="DateFinReel", type="datetime",nullable=true)

*/

private $dateFinReel;

/**

* @var integer

*

* @ORM\Column(name="NbreBatiment", type="integer")

*/

private $nbreBatiment;

/**

* @var integer

*

* @ORM\Column(name="NbreEtage", type="integer",nullable=true)

*/

private $nbreEtage;

/**

* @ORM\OneToMany(targetEntity="Immo\TypeConstructionBundle\Entity\TypeConstruction", cascade={"persist"}, mappedBy="projet")

*/

private $typeConstructions;

...}

在我的表单中,我在TypeConstructionType中执行此操作:

class TypeConstructionType extends AbstractType

{

/**

* @param FormBuilderInterface $builder

* @param array $options

*/

public function buildForm(FormBuilderInterface $builder, array $options)

{

$builder

->add('numLot')

->add('description')

->add('superficie')

->add('longueur')

->add('largeur')

->add('hauteur')

->add('millieme')

->add('typeFille', 'choice', array(

'choices' => array(

"lotissement" => "Lotissement",

"immeuble" => "Immeuble",

"appartement" => "Appartement",

"villa" => "Villa",

"piece" => "Piece"

),

'required' => false,

'empty_value' => 'Veuillez choisir',

'empty_data' => null

))

;

}...}

ImmeubleType的代码:

class ImmeubleType extends AbstractType

{

/**

* @param FormBuilderInterface $builder

* @param array $options

*/

public function buildForm(FormBuilderInterface $builder, array $options)

{

$builder

->add('nbreBloc')

->add('nbreEtage')

->add('type', 'entity', array(

'class' => 'ImmoTypeConstructionBundle:Type',

'query_builder' => function(TypeRepository $repo) {

return $repo->getTypeOfTypeConstruction('immeuble');

},

'empty_value' => 'Veuillez choisir',

'property' => 'type',

'multiple' => false

))

->add('blocs', 'collection', array(

'type' => new BlocType(),

'prototype' => true,

'allow_add' => true,

))

;

}

/**

* @param OptionsResolverInterface $resolver

*/

public function setDefaultOptions(OptionsResolverInterface $resolver)

{

$resolver->setDefaults(array(

'data_class' => 'Immo\TypeConstructionBundle\Entity\Immeuble'

));

}

/**

* @return string

*/

public function getName()

{

return 'immo_typeconstructionbundle_immeuble';

}

public function getParent()

{

return new TypeConstructionType();

}

}

ProjetType的代码:

class ProjetType extends AbstractType

{

/**

* @param FormBuilderInterface $builder

* @param array $options

*/

public function buildForm(FormBuilderInterface $builder, array $options)

{

$builder

->add('code','text')

->add('description','text')

->add('dateFinPrev','date')

->add('dateDebutPrev', 'date', array(

'widget' => 'single_text',

'input' => 'datetime',

'format' => 'dd/MM/yyyy',

))

->add('dateDebutReel','date')

->add('dateFinPrev', 'date', array(

'widget' => 'single_text',

'input' => 'datetime',

'format' => 'dd/MM/yyyy',

))

->add('dateFinReel','date')

->add('nbreBatiment')

->add('nbreEtage')

->add('typeConstructions', 'collection', array(

'type' => new TypeConstructionType(),

'allow_add' => true,

'allow_delete' => true

))

;

}...}

在添加项目的视图中,我有:

在ImmoTypeConstructionBundle:TypeConstruction:new.html.twig中,我有代码显示typeConstruction的选择列表(Immeuble,Villa ....):

Type de construction

{{form_widget(formTCAdd.typeFille,{'attr':{'class': 'form-control selectpicker'}})}}

以添加Projet的形式,我想从列表中选择TypeConstruction,如果我选择类型{ImmeubleType,则会显示Immeuble的形式1}}。

我该怎么做?

jgLw1.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值