7
7
8
8
namespace Magento \GraphQlResolverCache \Model \Resolver \Result ;
9
9
10
+ use Magento \Framework \Exception \ConfigurationMismatchException ;
10
11
use Magento \Framework \GraphQl \Query \ResolverInterface ;
11
12
use Magento \Framework \ObjectManagerInterface ;
12
13
@@ -64,7 +65,11 @@ public function getDehydratorForResolver(ResolverInterface $resolver): ?Dehydrat
64
65
if (array_key_exists ($ resolverClass , $ this ->dehydratorInstances )) {
65
66
return $ this ->dehydratorInstances [$ resolverClass ];
66
67
}
67
- $ resolverDehydrators = $ this ->getInstancesForResolver ($ resolver , $ this ->dehydratorConfig );
68
+ $ resolverDehydrators = $ this ->getInstancesForResolver (
69
+ $ resolver ,
70
+ $ this ->dehydratorConfig ,
71
+ DehydratorInterface::class
72
+ );
68
73
if (empty ($ resolverDehydrators )) {
69
74
$ this ->dehydratorInstances [$ resolverClass ] = null ;
70
75
} else {
@@ -87,7 +92,11 @@ public function getHydratorForResolver(ResolverInterface $resolver): ?HydratorIn
87
92
if (array_key_exists ($ resolverClass , $ this ->hydratorInstances )) {
88
93
return $ this ->hydratorInstances [$ resolverClass ];
89
94
}
90
- $ resolverHydrators = $ this ->getInstancesForResolver ($ resolver , $ this ->hydratorConfig );
95
+ $ resolverHydrators = $ this ->getInstancesForResolver (
96
+ $ resolver ,
97
+ $ this ->hydratorConfig ,
98
+ HydratorInterface::class
99
+ );
91
100
if (empty ($ resolverHydrators )) {
92
101
$ this ->hydratorInstances [$ resolverClass ] = null ;
93
102
} else {
@@ -117,10 +126,15 @@ private function getResolverClass(ResolverInterface $resolver): string
117
126
*
118
127
* @param ResolverInterface $resolver
119
128
* @param array $classesConfig
129
+ * @param string $interfaceName
120
130
* @return array
131
+ * @throws ConfigurationMismatchException
121
132
*/
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 {
124
138
$ resolverClassesConfig = [];
125
139
foreach ($ this ->getResolverClassChain ($ resolver ) as $ resolverClass ) {
126
140
if (isset ($ classesConfig [$ resolverClass ])) {
@@ -131,9 +145,32 @@ private function getInstancesForResolver(ResolverInterface $resolver, array $cla
131
145
return [];
132
146
}
133
147
$ dataProcessingClassList = [];
134
- foreach ($ resolverClassesConfig as $ classChain ) {
148
+ foreach ($ resolverClassesConfig as $ resolverClass => $ classChain ) {
135
149
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
+ }
137
174
}
138
175
}
139
176
usort ($ dataProcessingClassList , function ($ data1 , $ data2 ) {
0 commit comments