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

93,454 zapytań

142,449 odpowiedzi

322,718 komentarzy

62,834 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
...