Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [Symfony][SF2][Symfony2]Form collections
Forum PHP.pl > Forum > PHP > Frameworki
ixox
Witam. Mam problem z obsłużeniem formularzy. Poniżej kod.
Otrzymuję błąd:
  1. Notice: Array to string conversion in /home/.../vendor/doctrine/dbal/lib/Doctrine/DBAL/Statement.php line 103

Próbowałem również po kolei foreach-em "robić persist" ale otrzymuję błąd:
  1. The class 'Doctrine\Common\Collections\ArrayCollection' was not found in the chain configured namespaces FOS\UserBundle\Entity, SZ\UserBundle\Entity, SZ\SzBundle\Entity, FOS\UserBundle\Model


Dzięki za odpowiedź.

Entity:
  1. **
  2. * @ORM\Entity
  3. * @ORM\Table(name="availability")
  4. */
  5. class Availability
  6. {
  7.  
  8. public function __construct()
  9. {
  10. $this->availabilityFlexible = new \Doctrine\Common\Collections\ArrayCollection();
  11. $this->availabilitySession = new \Doctrine\Common\Collections\ArrayCollection();
  12. }
  13.  
  14. /**
  15.   * @ORM\Id
  16.   * @ORM\Column(type="integer")
  17.   * @ORM\GeneratedValue(strategy="AUTO")
  18.   */
  19. protected $id;
  20.  
  21. /**
  22.   * @ORM\Column(name="description", type="string", length=255, nullable=true)
  23.   */
  24. protected $description;
  25.  
  26.  
  27. /**
  28.   * @ORM\OneToMany(targetEntity="AvailabilityFlexible", mappedBy="availability", cascade={"persist", "remove"})
  29.   */
  30. protected $availabilityFlexible;
  31.  
  32. /**
  33.   * @ORM\OneToOne(targetEntity="AvailabilityFull", mappedBy="availability", cascade={"persist", "remove"})
  34.   */
  35. protected $availabilityFull;
  36.  
  37. /**
  38.   * @ORM\OneToMany(targetEntity="AvailabilitySession", mappedBy="availability", cascade={"persist", "remove"})
  39.   */
  40. protected $availabilitySession;

  1. // AvailabilityFlexible.php
  2. /**
  3.   * @ORM\ManyToOne(targetEntity="Availability", inversedBy="availabilityFlexible", cascade={"persist"})
  4.   * @ORM\JoinColumn(name="availability_id", referencedColumnName="id")
  5.   */
  6. protected $availability;
  7.  
  8. // AvailabilityFull.php
  9. /**
  10.   * @ORM\OneToOne(targetEntity="Availability", inversedBy="availabilityFull", cascade={"persist"})
  11.   * @ORM\JoinColumn(name="availability_id", referencedColumnName="id")
  12.   */
  13. protected $availability;
  14.  
  15.  
  16. // AvailabilitySession.php
  17. /**
  18.   * @ORM\ManyToOne(targetEntity="Availability", inversedBy="availabilitySession", cascade={"persist"})
  19.   * @ORM\JoinColumn(name="availability_id", referencedColumnName="id")
  20.   */
  21. protected $availability;


Form:
  1. public function buildForm(FormBuilderInterface $builder, array $options)
  2. {
  3.  
  4. $builder->add('description')
  5. ->add('AvailabilitySession', 'collection', array(
  6. 'type' => new AvailabilitySessionFormType(),
  7. 'allow_add' => true,
  8. 'prototype' => true,
  9. 'by_reference' => false,
  10. 'allow_delete' => true,
  11. ))
  12. ->add('AvailabilityFull', new AvailabilityFullFormType())
  13. ->add('AvailabilityFlexible', 'collection', array(
  14. 'type' => new AvailabilityFlexibleFormType(),
  15. 'allow_add' => true,
  16. 'by_reference' => false,
  17. 'allow_delete' => true,
  18. ));
  19. }

Kontroler:
  1. public function addAvailabilityAction(Request $request)
  2. {
  3. $availability = new Availability;
  4. $availability->getAvailabilityFlexible()->add(new AvailabilityFlexible);
  5. $availability->getAvailabilityFlexible()->add(new AvailabilityFlexible);
  6.  
  7. $form = $this->createForm(new AvailabilityFormType(), $availability);
  8.  
  9. if ($request->isMethod('POST')) {
  10. $form->bind($request);
  11. if ($form->isValid()) {
  12. $availability = $form->getData();
  13. $em = $this->getDoctrine()->getManager();
  14. $em->perist($availability);
  15. $em->flush();
  16. }
  17. }
  18. }
ixox
Zmieniłem nazwy. Zrobiłem tak jak w dokumentacji, czyli w każdej metodzię addAvailabilitySession dodałem
  1. $availabilitySession->setAvailabilitySession($this);

itd.
Niestety nadal mam ten sam błąd.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.