88use Doctrine \ORM \Mapping \ClassMetadata as ORMClassMetadata ;
99use Doctrine \ORM \Mapping \OneToOneOwningSideMapping ;
1010use Doctrine \Persistence \Mapping \ClassMetadata ;
11- use Sofascore \ PurgatoryBundle \ Attribute \ RouteParamValue \ InverseValuesAwareInterface ;
11+ use Psr \ Container \ ContainerInterface ;
1212use Sofascore \PurgatoryBundle \Attribute \RouteParamValue \ValuesInterface ;
13+ use Sofascore \PurgatoryBundle \Cache \PropertyResolver \InverseValuesBuilder \InverseValuesBuilderInterface ;
1314use Sofascore \PurgatoryBundle \Cache \RouteMetadata \RouteMetadata ;
1415use Sofascore \PurgatoryBundle \Cache \Subscription \PurgeSubscription ;
1516use Sofascore \PurgatoryBundle \Exception \PropertyNotAccessibleException ;
@@ -21,6 +22,7 @@ final class AssociationResolver implements SubscriptionResolverInterface
2122{
2223 public function __construct (
2324 private readonly PropertyReadInfoExtractorInterface $ extractor ,
25+ private readonly ContainerInterface $ inverseValuesBuilderLocator ,
2426 ) {
2527 }
2628
@@ -68,7 +70,9 @@ public function resolveSubscription(
6870 /** @var array<string, ValuesInterface> $inverseRouteParams */
6971 $ inverseRouteParams = [];
7072 foreach ($ routeParams as $ routeParam => $ values ) {
71- $ inverseRouteParams [$ routeParam ] = $ this ->getInverseValuesFor ($ values , $ associationTarget );
73+ $ inverseRouteParams [$ routeParam ] = $ this ->getInverseValuesBuilderFor ($ values )
74+ ?->build($ values , $ associationClass , $ associationTarget )
75+ ?? $ values ;
7276 }
7377
7478 if (null !== $ if = $ routeMetadata ->purgeOn ->if ) {
@@ -91,9 +95,21 @@ class: $associationClass,
9195 return true ;
9296 }
9397
94- private function getInverseValuesFor (ValuesInterface $ values , string $ associationTarget ): ValuesInterface
98+ /**
99+ * @template T of ValuesInterface
100+ *
101+ * @param T $values
102+ *
103+ * @return ?InverseValuesBuilderInterface<T>
104+ */
105+ private function getInverseValuesBuilderFor (ValuesInterface $ values ): ?InverseValuesBuilderInterface
95106 {
96- return $ values instanceof InverseValuesAwareInterface ? $ values ->buildInverseValuesFor ($ associationTarget ) : $ values ;
107+ /** @var ?InverseValuesBuilderInterface<T> $builder */
108+ $ builder = $ this ->inverseValuesBuilderLocator ->has ($ type = $ values ::type ())
109+ ? $ this ->inverseValuesBuilderLocator ->get ($ type )
110+ : null ;
111+
112+ return $ builder ;
97113 }
98114
99115 private function createGetter (string $ class , string $ property ): string
0 commit comments