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ć?