• 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

Cloud VPS
0 głosów
253 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 266 wizyt
pytanie zadane 25 lutego 2019 w PHP przez Assasz Nałogowiec (30,460 p.)
0 głosów
1 odpowiedź 292 wizyt
pytanie zadane 13 czerwca 2018 w PHP przez tomek923 Początkujący (480 p.)
0 głosów
1 odpowiedź 237 wizyt

93,483 zapytań

142,417 odpowiedzi

322,763 komentarzy

62,895 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

Kursy INF.02 i INF.03
...