在我的项目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}}。
我该怎么做?