Symfony CurrentUser-Attribut kollidiert mit Doctrine Param Converter

in  Verschiedenes , , ,

Symfony CurrentUser-Attribut kollidiert mit Doctrine Param Converter

Symfony und Doctrine bieten bereits Unterstützung für unterschiedliche native Attribute, welche seit in PHP 8 verwendet werden können. So lassen sich diese unter anderem für ORM-Definitionen (#[ORM\*]), Validierungsregeln (#[Assert\*]), Routen (#[Route]) oder zur Injektion von Service Tags (#[TaggedIterator]) einsetzen.

Das Attribut #[CurrentUser] erlaubt es, das Objekt mit dem aktuell angemeldeten Nutzer direkt als Controller-Argument zu übergeben; ein Beispiel hierfür lässt sich diesem Blog-Artikel entnehmen. Intern wird hierbei ein Argument Value Resolver benutzt.

Ein Problem entsteht dann, wenn das Zielobjekt eine Doctrine-Entität ist und darüber hinaus die Param Converter aktiviert sind. In diesem Fall wird versucht, das Objekt mit Hilfe eines Doctrine Converters aufzulösen, bevor der Argument Value Resolver seinen Job tun kann. Dies funktioniert jedoch nicht, da keine ID in der Route übergeben wird.

Während die perspektivische Lösung dieses Konflikts darin besteht, dass alle Param Converter durch Argument Value Resolver abgelöst werden, findet sich in dem dazugehörigen Symfony-Ticket der Workaround, übergangsweise das Argument mit dem Type Hint UserInterface zu versehen. Hierdurch wird der Param Converter nicht mehr ausgelöst, da es sich nicht um eine Entität handelt.