Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [SF][SF2][Symfony2] buildForm problem
Forum PHP.pl > Forum > PHP > Frameworki
damianooo
Połączyłem encję MEET (mecz) z nową encją LEAGUE (liga) i w CRUD dla funkcji CREATE muszę teraz dodać w formularzu nowe pole w którym będę mógł wybrać rodzaj ligi dla meczu.

Po dodaniu w klasie MeetType nowego pola dostaję jednak komunikat z poniższym błędem.
Nie do końca rozumiem komunikat tzn. w którym miejscu klasa nie może być konwertowana do typu String ?
  1. Catchable Fatal Error: Object of class AppBundle\Entity\League could not be converted to string


Klasa formularza - MeetType.php :

  1. class MeetType extends AbstractType
  2. {
  3. /**
  4.   * {@inheritdoc}
  5.   */
  6. public function buildForm(FormBuilderInterface $builder, array $options)
  7. {
  8. $builder->add('name')
  9. ->add('matchday')
  10. ->add('league')


klasa entity MEET - Meet.php :
  1. /**
  2.   * @ORM\ManyToOne(
  3.   * targetEntity = "League",
  4.   * )
  5.   *
  6.   * @ORM\JoinColumn(
  7.   * name = "league_id",
  8.   * referencedColumnName = "id",
  9.   * onDelete = "SET NULL"
  10.   * )
  11.   */
  12. private $league;


próbowałem też tak:

  1. ->add('league', 'collection', array(
  2. 'type' => new League(),
  3. 'allow_add' => true,
  4. 'allow_delete' => true,
  5. 'by_reference' => false,)
  6. )


ale wtedy dostaję podobny komunikat:

  1. Expected argument of type "string, Symfony\Component\Form\ResolvedFormTypeInterface or Symfony\Component\Form\FormTypeInterface", "AppBundle\Entity\League" given
ohm
dodaj do Leauge.php __toString() smile.gif Do innych też możesz profilaktycznie wink.gif
Pyton_000
A te rozwiazania nie pomagają? https://symfony.com/doc/2.8/form/form_collections.html
damianooo

  1. public function __toString() {
  2. return $this->getName();
  3. }


pomogło ...

Czemu aby to zadziałało należało użyć metody magicznej __toString() ?
Rozumiem że metoda ta konwertuje z typu Obiekt na String ale czemu akurat Symfony miało z tym problem tutaj ? Pewnie to nie kwestia Symfony.
ohm
Ogólnie rzecz ujmując, bez metody magicznej symfony nie wie co ma robić z tym obiektem, więc rzuca exceptiona.
Pyton_000
To powinno działać bez __toString dlatego że tutaj na sztywno piszesz co chcesz. Problemem będzie jak będziesz się chciał do czegoś innego odwołać.

Radzę jednak zerknąć dokumentację którą podesłałem i robić małymi kroczkami.
Pilsener
Problem powstał, bo został użyty typ prosty w formularzu zamiast np. EntityType::class

Następnie EntityType konfigurujemy tak, aby:
- wyświetlał odpowiedni label (np. z getFullName)
- renderował się jako select, radio czy też checkbox

Jest to dobrze opisane w dokumentacji:
http://symfony.com/doc/current/reference/f...pes/entity.html
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-2024 Invision Power Services, Inc.