• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

question-closed Symfony 3 - parametr opcjonalny zwraca obiekt zamiast nulla

Object Storage Arubacloud
0 głosów
204 wizyt
pytanie zadane 10 grudnia 2017 w PHP przez Assasz Nałogowiec (30,460 p.)
zamknięte 10 grudnia 2017 przez Assasz

Witam.

Spotkałem się ostatnio z niepojętą dla mnie sytuacją - otóż parametr opcjonalny danej akcji kontrolera, w przypadku jego braku, zwraca zamiast nulla obiekt encji, na którą jest rzutowany. Wygląda to tak:

    /**
     * @Route("/comment/create/{post}/{parent}",  name="comment_create", requirements={"post": "\d+", "parent": "\d+"})
     */
    public function createAction(Request $request, Post $post, Comment $parent = null, NotificationManager $notificationManager)
    {
        dump($parent);

        ...

Następnie po wejściu w routa, np. post/22 (gdzie 22 to id posta) zostaje również wyrenderowana powyższa akcja o roucie comment/create/22 - zatem parent jest równy null.

{{ render(controller('AppBundle:Comment:create', {'post': post})) }}

Mimo to dump($parent) z powyższej akcji zawsze zwraca mi pierwszy obiekt encji Comment przypisany do danego posta. Czyli np. coś takiego:

Comment {#1481 ▼
  +__isInitialized__: true
  -id: 31
  -content: "test"
  -author: User {#719 ▶}
  -createDate: DateTime {#2012 ▶}
  -votes: 2
  -voters: PersistentCollection {#2009 ▶}
  -parent: null
  -post: Post {#1106 ▶}
   …2
}

Tak wygląda własność parent encji Comment (o ile to w ogóle istotne):

    /**
     * @var int
     *
     * @ORM\ManyToOne(targetEntity="Comment")
     * @ORM\JoinColumn(name="parent_id", referencedColumnName="id", nullable=true)
     */
    private $parent;

Nie potrafię wytłumaczyć tego zachowania, aczkolwiek podejrzewam, że problem może leżeć po stronie Doctrine, który zwraca mi dany obiekt encji na podstawie id, którego otrzymał poprzez routa (jak usunę rzutowanie typu na Comment, to dostaję nulla jak powinienem). Może ktoś wie, jak to naprawić? 

komentarz zamknięcia: Rozwiązanie w komentarzu, może się komuś kiedyś przyda.
komentarz 10 grudnia 2017 przez Assasz Nałogowiec (30,460 p.)
edycja 10 grudnia 2017 przez Assasz

Byłem blisko - rozwiązaniem problemu był ParamConverter:

* @ParamConverter("parent", class="AppBundle:Comment", options={"id" = "parent"})

 

Podobne pytania

0 głosów
2 odpowiedzi 158 wizyt
pytanie zadane 25 lutego 2019 w PHP przez Assasz Nałogowiec (30,460 p.)
0 głosów
1 odpowiedź 203 wizyt
pytanie zadane 13 czerwca 2018 w PHP przez tomek923 Początkujący (480 p.)
0 głosów
1 odpowiedź 174 wizyt

92,550 zapytań

141,392 odpowiedzi

319,519 komentarzy

61,935 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...