77
88namespace Magento \GraphQlResolverCache \Model \Resolver \Result ;
99
10+ use Magento \Framework \Exception \ConfigurationMismatchException ;
1011use Magento \Framework \GraphQl \Query \ResolverInterface ;
1112use Magento \Framework \ObjectManagerInterface ;
1213
@@ -64,7 +65,11 @@ public function getDehydratorForResolver(ResolverInterface $resolver): ?Dehydrat
6465 if (array_key_exists ($ resolverClass , $ this ->dehydratorInstances )) {
6566 return $ this ->dehydratorInstances [$ resolverClass ];
6667 }
67- $ resolverDehydrators = $ this ->getInstancesForResolver ($ resolver , $ this ->dehydratorConfig );
68+ $ resolverDehydrators = $ this ->getInstancesForResolver (
69+ $ resolver ,
70+ $ this ->dehydratorConfig ,
71+ DehydratorInterface::class
72+ );
6873 if (empty ($ resolverDehydrators )) {
6974 $ this ->dehydratorInstances [$ resolverClass ] = null ;
7075 } else {
@@ -87,7 +92,11 @@ public function getHydratorForResolver(ResolverInterface $resolver): ?HydratorIn
8792 if (array_key_exists ($ resolverClass , $ this ->hydratorInstances )) {
8893 return $ this ->hydratorInstances [$ resolverClass ];
8994 }
90- $ resolverHydrators = $ this ->getInstancesForResolver ($ resolver , $ this ->hydratorConfig );
95+ $ resolverHydrators = $ this ->getInstancesForResolver (
96+ $ resolver ,
97+ $ this ->hydratorConfig ,
98+ HydratorInterface::class
99+ );
91100 if (empty ($ resolverHydrators )) {
92101 $ this ->hydratorInstances [$ resolverClass ] = null ;
93102 } else {
@@ -117,10 +126,15 @@ private function getResolverClass(ResolverInterface $resolver): string
117126 *
118127 * @param ResolverInterface $resolver
119128 * @param array $classesConfig
129+ * @param string $interfaceName
120130 * @return array
131+ * @throws ConfigurationMismatchException
121132 */
122- private function getInstancesForResolver (ResolverInterface $ resolver , array $ classesConfig ): array
123- {
133+ private function getInstancesForResolver (
134+ ResolverInterface $ resolver ,
135+ array $ classesConfig ,
136+ string $ interfaceName
137+ ): array {
124138 $ resolverClassesConfig = [];
125139 foreach ($ this ->getResolverClassChain ($ resolver ) as $ resolverClass ) {
126140 if (isset ($ classesConfig [$ resolverClass ])) {
@@ -131,9 +145,32 @@ private function getInstancesForResolver(ResolverInterface $resolver, array $cla
131145 return [];
132146 }
133147 $ dataProcessingClassList = [];
134- foreach ($ resolverClassesConfig as $ classChain ) {
148+ foreach ($ resolverClassesConfig as $ resolverClass => $ classChain ) {
135149 foreach ($ classChain as $ classData ) {
136- $ dataProcessingClassList [] = $ classData ;
150+ if (is_a ($ classData ['class ' ], $ interfaceName , true )) {
151+ $ dataProcessingClassList [] = $ classData ;
152+ } else {
153+ if ($ interfaceName == HydratorInterface::class) {
154+ throw new ConfigurationMismatchException (
155+ __ (
156+ 'Hydrator %1 configured for resolver %2 must implement %3. ' ,
157+ $ classData ['class ' ],
158+ $ resolverClass ,
159+ $ interfaceName
160+ )
161+ );
162+ } else {
163+ throw new ConfigurationMismatchException (
164+ __ (
165+ 'Dehydrator %1 configured for resolver %2 must implement %3. ' ,
166+ $ classData ['class ' ],
167+ $ resolverClass ,
168+ $ interfaceName
169+ )
170+ );
171+ }
172+
173+ }
137174 }
138175 }
139176 usort ($ dataProcessingClassList , function ($ data1 , $ data2 ) {
0 commit comments