我正在尝试删除表单中的项目,但没有任何反应(甚至没有错误......但我可以毫无问题地进行编辑!)
我有一个嵌入了3个级别的表单集合(它是关于我的网站的法律声明分为子级别)
以下是我的实体:
OneToMany中名为“MentionLegaleNv1”的第一级
class MentionLegaleNv1 {
/**
* @ORM\Column(name="id", type="integer", nullable=false)
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @ORM\Column(name="titre", type="string", length=50, nullable=false)
*/
private $titre;
/**
* @ORM\OneToMany(targetEntity="MentionLegaleNv2", mappedBy="MentionsLegalesNv1", cascade={"persist", "remove"})
*/
private $MentionsLegalesNv2;
/**
* Constructor
*/
public function __construct() {
$this->MentionsLegalesNv2 = new \Doctrine\Common\Collections\ArrayCollection();
}
/**
* Get id
*
* @return integer
*/
public function getId() {
return $this->id;
}
/**
* Set titre
*
* @param string $titre
* @return MentionLegaleNv1
*/
public function setTitre($titre) {
$this->titre = $titre;
return $this;
}
/**
* Get titre
*
* @return string
*/
public function getTitre() {
return $this->titre;
}
/**
* Add MentionsLegalesNv2
*
* @param \Video2Learn\BddBundle\Entity\MentionLegaleNv2 $mentionsLegalesNv2
* @return MentionLegaleNv1
*/
public function addMentionsLegalesNv2(\Video2Learn\BddBundle\Entity\MentionLegaleNv2 $mentionsLegalesNv2) {
$mentionsLegalesNv2->setMentionLegaleNv1($this);
$this->MentionsLegalesNv2[] = $mentionsLegalesNv2;
return $this;
}
/**
* Remove MentionsLegalesNv2
*
* @param \Video2Learn\BddBundle\Entity\MentionLegaleNv2 $mentionsLegalesNv2
*/
public function removeMentionsLegalesNv2(\Video2Learn\BddBundle\Entity\MentionLegaleNv2 $mentionsLegalesNv2) {
$this->MentionsLegalesNv2->removeElement($mentionsLegalesNv2);
}
/**
* Get MentionsLegalesNv2
*
* @return \Doctrine\Common\Collections\Collection
*/
public function getMentionsLegalesNv2() {
return $this->MentionsLegalesNv2;
}
ManyToOne和OneToMany中的第二个名为“MentionLegaleNv2”
class MentionLegaleNv2 {
/**
* @ORM\Column(name="id", type="integer", nullable=false)
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @ORM\Column(name="titre", type="string", length=50, nullable=false)
*/
private $titre;
/**
* @ORM\OneToMany(targetEntity="MentionLegaleNv3", mappedBy="MentionsLegalesNv2", cascade={"persist", "remove"})
*/
private $MentionsLegalesNv3;
/**
* @ORM\ManyToOne(targetEntity="MentionLegaleNv1", inversedBy="MentionsLegalesNv2")
*/
private $MentionsLegalesNv1;
/**
* Constructor
*/
public function __construct() {
$this->MentionsLegalesNv3 = new \Doctrine\Common\Collections\ArrayCollection();
}
/**
* Get id
*
* @return integer
*/
public function getId() {
return $this->id;
}
/**
* Set titre
*
* @param string $titre
* @return MentionLegaleNv2
*/
public function setTitre($titre) {
$this->titre = $titre;
return $this;
}
/**
* Get titre
*
* @return string
*/
public function getTitre() {
return $this->titre;
}
/**
* Add MentionsLegalesNv3
*
* @param \Video2Learn\BddBundle\Entity\MentionLegaleNv3 $mentionsLegalesNv3
* @return MentionLegaleNv2
*/
public function addMentionsLegalesNv3(\Video2Learn\BddBundle\Entity\MentionLegaleNv3 $mentionsLegalesNv3) {
$mentionsLegalesNv3->setMentionLegaleNv2($this);
$this->MentionsLegalesNv3[] = $mentionsLegalesNv3;
return $this;
}
/**
* Remove MentionsLegalesNv3
*
* @param \Video2Learn\BddBundle\Entity\MentionLegaleNv3 $mentionsLegalesNv3
*/
public function removeMentionsLegalesNv3(\Video2Learn\BddBundle\Entity\MentionLegaleNv3 $mentionsLegalesNv3) {
$this->MentionsLegalesNv3->removeElement($mentionsLegalesNv3);
}
/**
* Get MentionsLegalesNv3
*
* @return \Doctrine\Common\Collections\Collection
*/
public function getMentionsLegalesNv3() {
return $this->MentionsLegalesNv3;
}
/**
* Set MentionsLegalesNv1
*
* @param \Video2Learn\BddBundle\Entity\MentionLegaleNv1 $mentionsLegalesNv1
* @return MentionLegaleNv2
*/
public function setMentionsLegalesNv1(\Video2Learn\BddBundle\Entity\MentionLegaleNv1 $mentionsLegalesNv1 = null) {
$this->MentionsLegalesNv1 = $mentionsLegalesNv1;
return $this;
}
/**
* Get MentionsLegalesNv1
*
* @return \Video2Learn\BddBundle\Entity\MentionLegaleNv1
*/
public function getMentionsLegalesNv1() {
return $this->MentionsLegalesNv1;
}
ManyToOne中名为“MentionLegaleNv3”的最后一个级别
class MentionLegaleNv3 {
/**
* @ORM\Column(name="id", type="integer", nullable=false)
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @ORM\Column(name="titre", type="string", length=50, nullable=false)
*/
private $titre;
/**
* @ORM\Column(name="description", type="string", length=500, nullable=false)
*/
private $description;
/**
* @ORM\Column(name="removeTuto", type="boolean", nullable=false)
*/
private $removeTuto;
/**
* @ORM\ManyToOne(targetEntity="MentionLegaleNv2", inversedBy="MentionsLegalesNv3")
* @ORM\JoinColumn(referencedColumnName="id", nullable=false)
*/
private $MentionsLegalesNv2;
/**
* Get id
*
* @return integer
*/
public function getId()
{
return $this->id;
}
/**
* Set titre
*
* @param string $titre
* @return MentionLegaleNv3
*/
public function setTitre($titre)
{
$this->titre = $titre;
return $this;
}
/**
* Get titre
*
* @return string
*/
public function getTitre()
{
return $this->titre;
}
/**
* Set description
*
* @param string $description
* @return MentionLegaleNv3
*/
public function setDescription($description)
{
$this->description = $description;
return $this;
}
/**
* Get description
*
* @return string
*/
public function getDescription()
{
return $this->description;
}
/**
* Set removeTuto
*
* @param boolean $removeTuto
* @return MentionLegaleNv3
*/
public function setRemoveTuto($removeTuto)
{
$this->removeTuto = $removeTuto;
return $this;
}
/**
* Get removeTuto
*
* @return boolean
*/
public function getRemoveTuto()
{
return $this->removeTuto;
}
/**
* Set MentionsLegalesNv2
*
* @param \Video2Learn\BddBundle\Entity\MentionLegaleNv2 $mentionsLegalesNv2
* @return MentionLegaleNv3
*/
public function setMentionsLegalesNv2(\Video2Learn\BddBundle\Entity\MentionLegaleNv2 $mentionsLegalesNv2)
{
$this->MentionsLegalesNv2 = $mentionsLegalesNv2;
return $this;
}
/**
* Get MentionsLegalesNv2
*
* @return \Video2Learn\BddBundle\Entity\MentionLegaleNv2
*/
public function getMentionsLegalesNv2()
{
return $this->MentionsLegalesNv2;
}
以下是FormType:
提及LegalesNv1Type:
class MentionLegaleNv1Type extends AbstractType {
/**
* @param FormBuilderInterface $builder
* @param array $options
*/
public function buildForm(FormBuilderInterface $builder, array $options) {
$builder
->add('MentionsLegalesNv2', 'collection', array(
'type' => new MentionLegaleNv2Type(),
'prototype' => true,
'by_reference' => false,
'allow_add' => true,
'allow_delete' => true,
'error_bubbling' => false,
'label' => false,
'cascade_validation' => true,
'options' => array(
'label' => false,
),
'attr' => array(
'class' => 'MentionsLegalesNv2 list-unstyled',
)
))
->add('Valider', 'submit', array(
'attr' => array(
'class' => 'suivant btn btn-success',
'formnovalidate' => 'formnovalidate',
)
))
;
}
/**
* @param OptionsResolverInterface $resolver
*/
public function setDefaultOptions(OptionsResolverInterface $resolver) {
$resolver->setDefaults(array(
'data_class' => 'Video2Learn\BddBundle\Entity\MentionLegaleNv1',
'cascade_validation' => true,
));
}
/**
* @return string
*/
public function getName() {
return 'video2learn_administrationbundle_mentionlegalenv1';
}
}
提及LegalesNv2Type:
class MentionLegaleNv2Type extends AbstractType {
/**
* @param FormBuilderInterface $builder
* @param array $options
*/
public function buildForm(FormBuilderInterface $builder, array $options) {
$builder
->add('titre', 'text', array(
'required' => true,
'label' => false,
'attr' => array(
'placeholder' => 'Mention Légales NV1 n°#',
'class' => 'form-control',
'title' => 'Titre de la Mention Legale NV1 n°#'
)
))
->add('MentionsLegalesNv3', 'collection', array(
'type' => new MentionLegaleNv3Type(),
'prototype' => true,
'by_reference' => false,
'allow_add' => true,
'cascade_validation' => true,
'allow_delete' => true,
'error_bubbling' => false,
'label' => false,
'options' => array(
'label' => false // sert à supprimer les index
),
'attr' => array(
'class' => 'MentionsLegalesNv3 list-unstyled',
)
))
;
}
/**
* @param OptionsResolverInterface $resolver
*/
public function setDefaultOptions(OptionsResolverInterface $resolver) {
$resolver->setDefaults(array(
'data_class' => 'Video2Learn\BddBundle\Entity\MentionLegaleNv2',
'cascade_validation' => true,
));
}
/**
* @return string
*/
public function getName() {
return 'video2learn_administrationbundle_mentionlegalenv2';
}
}
提及LegalesNv3Type:
class MentionLegaleNv3Type extends AbstractType {
/**
* @param FormBuilderInterface $builder
* @param array $options
*/
public function buildForm(FormBuilderInterface $builder, array $options) {
$builder
->add('titre', 'text', array(
'required' => true,
'label' => 'Titre Paragraphe',
))
->add('description','textarea', array(
'required' => true,
'label' => 'Description Paragraphe',
))
->add('removeTuto')
;
}
/**
* @param OptionsResolverInterface $resolver
*/
public function setDefaultOptions(OptionsResolverInterface $resolver) {
$resolver->setDefaults(array(
'data_class' => 'Video2Learn\BddBundle\Entity\MentionLegaleNv3',
'cascade_validation' => true,
));
}
/**
* @return string
*/
public function getName() {
return 'video2learn_administrationbundle_mentionlegalenv3';
}
}
我的控制员:
class MentionsLegalesController extends Controller {
public function mentionLegalesAction(Request $request) {
$em = $this->getDoctrine()->getManager();
$ML = $em->getRepository('Video2LearnBddBundle:MentionLegaleNv0')->findOneById(1);
if ($request->getMethod() == 'GET') {
$form = $this->createForm(new MentionLegaleNv0Type(), $ML);
}
if ($request->isMethod('POST')) {
$form = $this->createForm(new MentionLegaleNv0Type(), $ML);
$form->handleRequest($request);
if ($form->isValid()) {
$ML = $form->getData();
$em->persist($ML);
$em->flush();
return $this->redirect($this->generateUrl('administration_mentions_legales'));
}
}
return $this->render('Video2LearnAdministrationBundle:Pages:mentions_legales.html.twig', array(
'form' => $form->createView(),
));
}
}
我发现在Cookm of Symfony(http://symfony.com/doc/current/cookbook/form/form_collections.html)中我尝试了但没有成功......
class MentionsLegalesController extends Controller {
public function mentionLegalesAction(Request $request) {
$em = $this->getDoctrine()->getManager();
$ML = $em->getRepository('Video2LearnBddBundle:MentionLegaleNv1')->findOneById(1);
foreach ($ML->getMentionsLegalesNv2() as $tag) {
$originalTags->add($tag);
}
if ($request->getMethod() == 'GET') {
$form = $this->createForm(new MentionLegaleNv1Type(), $ML);
}
if ($request->isMethod('POST')) {
$form = $this->createForm(new MentionLegaleNv1Type(), $ML);
$form->handleRequest($request);
if ($form->isValid()) {
foreach ($originalTags as $tag) {
if ($ML->getMentionsLegalesNv2()->contains($tag) == false) {
$em->persist($tag);
}
}
$em->persist($ML);
$em->flush();
return $this->redirect($this->generateUrl('administration_mentions_legales'));
}
}
return $this->render('Video2LearnAdministrationBundle:Pages:mentions_legales.html.twig', array(
'form' => $form->createView(),
));
}
}
如何删除MentionLegaleNv2或MentionLegaleNv3中的项目?
感谢您的帮助!
答案 0 :(得分:0)
您的删除方法应该以与添加方法相同的方式自动更新连接的对象。
/**
* Remove MentionsLegalesNv2
*
* @param \Video2Learn\BddBundle\Entity\MentionLegaleNv2 $mentionsLegalesNv2
*/
public function removeMentionsLegalesNv2(MentionLegaleNv2 $mentionsLegalesNv2) {
$this->MentionsLegalesNv2->removeElement($mentionsLegalesNv2);
$mentionsLegalesNv2->setMentionLegaleNv1(null);
}
答案 1 :(得分:0)
我做了另一种方式...
我做到了:
if ($form->isValid()) {
// supprime la relation entre le tag et la « Task »
foreach ($originalMentionsLegalesNv1 as $mlnv2) {
if ($MentionsLegalesNv1->getMentionsLegalesNv2()->contains($mlnv2) == false) {
$em->remove($mlnv2);
}
}
$em->persist($MentionsLegalesNv1);
$em->flush();