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 ])) {
@@ -141,7 +155,13 @@ private function getInstancesForResolver(ResolverInterface $resolver, array $cla
141155 });
142156 $ dataProcessingInstances = [];
143157 foreach ($ dataProcessingClassList as $ classData ) {
144- $ dataProcessingInstances [] = $ this ->objectManager ->get ($ classData ['class ' ]);
158+ if (is_a ($ classData ['class ' ], $ interfaceName , true )) {
159+ $ dataProcessingInstances [] = $ this ->objectManager ->get ($ classData ['class ' ]);
160+ } else {
161+ throw new ConfigurationMismatchException (
162+ __ ('%1 should implement %2 ' , $ classData ['class ' ], $ interfaceName )
163+ );
164+ }
145165 }
146166 return $ dataProcessingInstances ;
147167 }
0 commit comments