These results are based on our legacy PHP analysis, consider migrating to our new PHP analysis engine instead. Learn more
1 | <?php |
||
2 | |||
3 | /* |
||
4 | * This file is part of the FOSElasticaBundle package. |
||
5 | * |
||
6 | * (c) FriendsOfSymfony <http://friendsofsymfony.github.com/> |
||
7 | * |
||
8 | * For the full copyright and license information, please view the LICENSE |
||
9 | * file that was distributed with this source code. |
||
10 | */ |
||
11 | |||
12 | namespace FOS\ElasticaBundle\DependencyInjection; |
||
13 | |||
14 | use Symfony\Component\Config\Definition\Builder\ArrayNodeDefinition; |
||
15 | use Symfony\Component\Config\Definition\Builder\TreeBuilder; |
||
16 | use Symfony\Component\Config\Definition\ConfigurationInterface; |
||
17 | |||
18 | class Configuration implements ConfigurationInterface |
||
19 | { |
||
20 | const SUPPORTED_DRIVERS = ['orm', 'mongodb', 'phpcr']; |
||
21 | |||
22 | /** |
||
23 | * If the kernel is running in debug mode. |
||
24 | * |
||
25 | * @var bool |
||
26 | */ |
||
27 | private $debug; |
||
28 | |||
29 | 30 | public function __construct($debug) |
|
30 | { |
||
31 | 30 | $this->debug = $debug; |
|
32 | 30 | } |
|
33 | |||
34 | /** |
||
35 | * Generates the configuration tree. |
||
36 | * |
||
37 | * @return TreeBuilder |
||
38 | */ |
||
39 | 30 | public function getConfigTreeBuilder() |
|
40 | { |
||
41 | 30 | $treeBuilder = new TreeBuilder('fos_elastica'); |
|
42 | |||
43 | 30 | if (method_exists($treeBuilder, 'getRootNode')) { |
|
44 | 30 | $rootNode = $treeBuilder->getRootNode(); |
|
45 | } else { |
||
46 | // BC layer for symfony/config 4.1 and older |
||
47 | $rootNode = $treeBuilder->root('fos_elastica'); |
||
48 | } |
||
49 | |||
50 | 30 | $this->addClientsSection($rootNode); |
|
0 ignored issues
–
show
|
|||
51 | 30 | $this->addIndexesSection($rootNode); |
|
0 ignored issues
–
show
$rootNode of type object<Symfony\Component...Builder\NodeDefinition> is not a sub-type of object<Symfony\Component...er\ArrayNodeDefinition> . It seems like you assume a child class of the class Symfony\Component\Config...\Builder\NodeDefinition to be always present.
This check looks for parameters that are defined as one type in their type hint or doc comment but seem to be used as a narrower type, i.e an implementation of an interface or a subclass. Consider changing the type of the parameter or doing an instanceof check before assuming your parameter is of the expected type.
Loading history...
|
|||
52 | |||
53 | $rootNode |
||
54 | 30 | ->children() |
|
55 | 30 | ->scalarNode('default_client') |
|
56 | 30 | ->info('Defaults to the first client defined') |
|
57 | 30 | ->end() |
|
58 | 30 | ->scalarNode('default_index') |
|
59 | 30 | ->info('Defaults to the first index defined') |
|
60 | 30 | ->end() |
|
61 | 30 | ->scalarNode('default_manager')->defaultValue('orm')->end() |
|
62 | 30 | ->arrayNode('serializer') |
|
63 | 30 | ->treatNullLike([]) |
|
64 | 30 | ->children() |
|
65 | 30 | ->scalarNode('callback_class')->defaultValue('FOS\ElasticaBundle\Serializer\Callback')->end() |
|
66 | 30 | ->scalarNode('serializer')->defaultValue('serializer')->end() |
|
67 | 30 | ->end() |
|
68 | 30 | ->end() |
|
69 | 30 | ->end() |
|
70 | ; |
||
71 | |||
72 | 30 | return $treeBuilder; |
|
73 | } |
||
74 | |||
75 | /** |
||
76 | * Returns the array node used for "dynamic_templates". |
||
77 | */ |
||
78 | 30 | public function getDynamicTemplateNode() |
|
79 | { |
||
80 | 30 | $builder = new TreeBuilder(); |
|
81 | 30 | $node = $builder->root('dynamic_templates'); |
|
82 | |||
83 | $node |
||
84 | 30 | ->prototype('array') |
|
85 | 30 | ->prototype('array') |
|
86 | 30 | ->children() |
|
87 | 30 | ->scalarNode('match')->end() |
|
88 | 30 | ->scalarNode('unmatch')->end() |
|
89 | 30 | ->scalarNode('match_mapping_type')->end() |
|
90 | 30 | ->scalarNode('path_match')->end() |
|
91 | 30 | ->scalarNode('path_unmatch')->end() |
|
92 | 30 | ->scalarNode('match_pattern')->end() |
|
93 | 30 | ->arrayNode('mapping') |
|
94 | 30 | ->prototype('variable') |
|
95 | 30 | ->treatNullLike([]) |
|
96 | 30 | ->end() |
|
97 | 30 | ->end() |
|
98 | 30 | ->end() |
|
99 | 30 | ->end() |
|
100 | 30 | ->end() |
|
101 | ; |
||
102 | |||
103 | 30 | return $node; |
|
104 | } |
||
105 | |||
106 | /** |
||
107 | * Returns the array node used for "types". |
||
108 | */ |
||
109 | 30 | protected function getTypesNode() |
|
110 | { |
||
111 | 30 | $builder = new TreeBuilder(); |
|
112 | 30 | $node = $builder->root('types'); |
|
113 | |||
114 | $node |
||
115 | 30 | ->useAttributeAsKey('name') |
|
116 | 30 | ->prototype('array') |
|
117 | 30 | ->treatNullLike([]) |
|
118 | 30 | ->beforeNormalization() |
|
119 | 30 | ->ifNull() |
|
120 | 30 | ->thenEmptyArray() |
|
121 | 30 | ->end() |
|
122 | // Support multiple dynamic_template formats to match the old bundle style |
||
123 | // and the way ElasticSearch expects them |
||
124 | 30 | ->beforeNormalization() |
|
125 | 30 | ->ifTrue(function ($v) { |
|
126 | 21 | return isset($v['dynamic_templates']); |
|
127 | 30 | }) |
|
128 | 30 | ->then(function ($v) { |
|
129 | 3 | $dt = []; |
|
130 | 3 | foreach ($v['dynamic_templates'] as $key => $type) { |
|
131 | 3 | if (is_int($key)) { |
|
132 | 3 | $dt[] = $type; |
|
133 | } else { |
||
134 | 3 | $dt[][$key] = $type; |
|
135 | } |
||
136 | } |
||
137 | |||
138 | 3 | $v['dynamic_templates'] = $dt; |
|
139 | |||
140 | 3 | return $v; |
|
141 | 30 | }) |
|
142 | 30 | ->end() |
|
143 | 30 | ->children() |
|
144 | 30 | ->booleanNode('date_detection')->end() |
|
145 | 30 | ->arrayNode('dynamic_date_formats')->prototype('scalar')->end()->end() |
|
146 | 30 | ->scalarNode('analyzer')->end() |
|
147 | 30 | ->booleanNode('numeric_detection')->end() |
|
148 | 30 | ->scalarNode('dynamic')->end() |
|
149 | 30 | ->variableNode('indexable_callback')->end() |
|
150 | 30 | ->append($this->getPersistenceNode()) |
|
151 | 30 | ->append($this->getSerializerNode()) |
|
152 | 30 | ->end() |
|
153 | 30 | ->append($this->getIdNode()) |
|
154 | 30 | ->append($this->getPropertiesNode()) |
|
155 | 30 | ->append($this->getDynamicTemplateNode()) |
|
156 | 30 | ->append($this->getSourceNode()) |
|
157 | 30 | ->append($this->getRoutingNode()) |
|
158 | 30 | ->append($this->getParentNode()) |
|
159 | 30 | ->append($this->getAllNode()) |
|
160 | 30 | ->end() |
|
161 | ; |
||
162 | |||
163 | 30 | return $node; |
|
164 | } |
||
165 | |||
166 | /** |
||
167 | * Returns the array node used for "properties". |
||
168 | */ |
||
169 | 30 | protected function getPropertiesNode() |
|
170 | { |
||
171 | 30 | $builder = new TreeBuilder(); |
|
172 | 30 | $node = $builder->root('properties'); |
|
173 | |||
174 | $node |
||
175 | 30 | ->useAttributeAsKey('name') |
|
176 | 30 | ->prototype('variable') |
|
177 | 30 | ->treatNullLike([]); |
|
178 | |||
179 | 30 | return $node; |
|
180 | } |
||
181 | |||
182 | /** |
||
183 | * Returns the array node used for "_id". |
||
184 | */ |
||
185 | 30 | View Code Duplication | protected function getIdNode() |
186 | { |
||
187 | 30 | $builder = new TreeBuilder(); |
|
188 | 30 | $node = $builder->root('_id'); |
|
189 | |||
190 | $node |
||
191 | 30 | ->children() |
|
192 | 30 | ->scalarNode('path')->end() |
|
193 | 30 | ->end() |
|
194 | ; |
||
195 | |||
196 | 30 | return $node; |
|
197 | } |
||
198 | |||
199 | /** |
||
200 | * Returns the array node used for "_source". |
||
201 | */ |
||
202 | 30 | protected function getSourceNode() |
|
203 | { |
||
204 | 30 | $builder = new TreeBuilder(); |
|
205 | 30 | $node = $builder->root('_source'); |
|
206 | |||
207 | $node |
||
208 | 30 | ->children() |
|
209 | 30 | ->arrayNode('excludes') |
|
210 | 30 | ->useAttributeAsKey('name') |
|
211 | 30 | ->prototype('scalar')->end() |
|
212 | 30 | ->end() |
|
213 | 30 | ->arrayNode('includes') |
|
214 | 30 | ->useAttributeAsKey('name') |
|
215 | 30 | ->prototype('scalar')->end() |
|
216 | 30 | ->end() |
|
217 | 30 | ->scalarNode('compress')->end() |
|
218 | 30 | ->scalarNode('compress_threshold')->end() |
|
219 | 30 | ->scalarNode('enabled')->defaultTrue()->end() |
|
220 | 30 | ->end() |
|
221 | ; |
||
222 | |||
223 | 30 | return $node; |
|
224 | } |
||
225 | |||
226 | /** |
||
227 | * Returns the array node used for "_routing". |
||
228 | */ |
||
229 | 30 | View Code Duplication | protected function getRoutingNode() |
230 | { |
||
231 | 30 | $builder = new TreeBuilder(); |
|
232 | 30 | $node = $builder->root('_routing'); |
|
233 | |||
234 | $node |
||
235 | 30 | ->children() |
|
236 | 30 | ->scalarNode('required')->end() |
|
237 | 30 | ->scalarNode('path')->end() |
|
238 | 30 | ->end() |
|
239 | ; |
||
240 | |||
241 | 30 | return $node; |
|
242 | } |
||
243 | |||
244 | /** |
||
245 | * Returns the array node used for "_parent". |
||
246 | */ |
||
247 | 30 | protected function getParentNode() |
|
248 | { |
||
249 | 30 | $builder = new TreeBuilder(); |
|
250 | 30 | $node = $builder->root('_parent'); |
|
251 | |||
252 | $node |
||
253 | 30 | ->children() |
|
254 | 30 | ->scalarNode('type')->end() |
|
255 | 30 | ->scalarNode('property')->defaultValue(null)->end() |
|
256 | 30 | ->scalarNode('identifier')->defaultValue('id')->end() |
|
257 | 30 | ->end() |
|
258 | ; |
||
259 | |||
260 | 30 | return $node; |
|
261 | } |
||
262 | |||
263 | /** |
||
264 | * Returns the array node used for "_all". |
||
265 | */ |
||
266 | 30 | protected function getAllNode() |
|
267 | { |
||
268 | 30 | $builder = new TreeBuilder(); |
|
269 | 30 | $node = $builder->root('_all'); |
|
270 | |||
271 | $node |
||
272 | 30 | ->children() |
|
273 | 30 | ->scalarNode('enabled')->defaultValue(true)->end() |
|
274 | 30 | ->scalarNode('analyzer')->end() |
|
275 | 30 | ->end() |
|
276 | ; |
||
277 | |||
278 | 30 | return $node; |
|
279 | } |
||
280 | |||
281 | /** |
||
282 | * @return ArrayNodeDefinition|\Symfony\Component\Config\Definition\Builder\NodeDefinition |
||
283 | */ |
||
284 | 30 | protected function getPersistenceNode() |
|
285 | { |
||
286 | 30 | $builder = new TreeBuilder(); |
|
287 | 30 | $node = $builder->root('persistence'); |
|
288 | |||
289 | $node |
||
290 | 30 | ->validate() |
|
291 | 30 | ->ifTrue(function ($v) { |
|
292 | 17 | return isset($v['driver']) && 'orm' !== $v['driver'] && !empty($v['elastica_to_model_transformer']['hints']); |
|
293 | 30 | }) |
|
294 | 30 | ->thenInvalid('Hints are only supported by the "orm" driver') |
|
295 | 30 | ->end() |
|
296 | 30 | ->children() |
|
297 | 30 | ->scalarNode('driver') |
|
298 | 30 | ->defaultValue('orm') |
|
299 | 30 | ->validate() |
|
300 | 30 | ->ifNotInArray(self::SUPPORTED_DRIVERS) |
|
301 | 30 | ->thenInvalid('The driver %s is not supported. Please choose one of '.json_encode(self::SUPPORTED_DRIVERS)) |
|
302 | 30 | ->end() |
|
303 | 30 | ->end() |
|
304 | 30 | ->scalarNode('model')->defaultValue(null)->end() |
|
305 | 30 | ->scalarNode('repository')->end() |
|
306 | 30 | ->scalarNode('identifier')->defaultValue('id')->end() |
|
307 | 30 | ->arrayNode('provider') |
|
308 | 30 | ->addDefaultsIfNotSet() |
|
309 | 30 | ->children() |
|
310 | 30 | ->scalarNode('batch_size')->defaultValue(100)->end() |
|
311 | 30 | ->scalarNode('clear_object_manager')->defaultTrue()->end() |
|
312 | 30 | ->scalarNode('debug_logging') |
|
313 | 30 | ->defaultValue($this->debug) |
|
314 | 30 | ->treatNullLike(true) |
|
315 | 30 | ->end() |
|
316 | 30 | ->scalarNode('query_builder_method')->defaultValue('createQueryBuilder')->end() |
|
317 | 30 | ->scalarNode('service')->end() |
|
318 | 30 | ->end() |
|
319 | 30 | ->end() |
|
320 | 30 | ->arrayNode('listener') |
|
321 | 30 | ->addDefaultsIfNotSet() |
|
322 | 30 | ->children() |
|
323 | 30 | ->booleanNode('enabled')->defaultTrue()->end() |
|
324 | 30 | ->scalarNode('insert')->defaultTrue()->end() |
|
325 | 30 | ->scalarNode('update')->defaultTrue()->end() |
|
326 | 30 | ->scalarNode('delete')->defaultTrue()->end() |
|
327 | 30 | ->scalarNode('flush')->defaultTrue()->end() |
|
328 | 30 | ->booleanNode('defer')->defaultFalse()->end() |
|
329 | 30 | ->scalarNode('logger') |
|
330 | 30 | ->defaultFalse() |
|
331 | 30 | ->treatNullLike('fos_elastica.logger') |
|
332 | 30 | ->treatTrueLike('fos_elastica.logger') |
|
333 | 30 | ->end() |
|
334 | 30 | ->scalarNode('service')->end() |
|
335 | 30 | ->end() |
|
336 | 30 | ->end() |
|
337 | 30 | ->arrayNode('finder') |
|
338 | 30 | ->addDefaultsIfNotSet() |
|
339 | 30 | ->children() |
|
340 | 30 | ->scalarNode('service')->end() |
|
341 | 30 | ->end() |
|
342 | 30 | ->end() |
|
343 | 30 | ->arrayNode('elastica_to_model_transformer') |
|
344 | 30 | ->addDefaultsIfNotSet() |
|
345 | 30 | ->children() |
|
346 | 30 | ->arrayNode('hints') |
|
347 | 30 | ->prototype('array') |
|
348 | 30 | ->children() |
|
349 | 30 | ->scalarNode('name')->end() |
|
350 | 30 | ->scalarNode('value')->end() |
|
351 | 30 | ->end() |
|
352 | 30 | ->end() |
|
353 | 30 | ->end() |
|
354 | 30 | ->booleanNode('hydrate')->defaultTrue()->end() |
|
355 | 30 | ->booleanNode('ignore_missing') |
|
356 | 30 | ->defaultFalse() |
|
357 | 30 | ->info('Silently ignore results returned from Elasticsearch without corresponding persistent object.') |
|
358 | 30 | ->end() |
|
359 | 30 | ->scalarNode('query_builder_method')->defaultValue('createQueryBuilder')->end() |
|
360 | 30 | ->scalarNode('service')->end() |
|
361 | 30 | ->end() |
|
362 | 30 | ->end() |
|
363 | 30 | ->arrayNode('model_to_elastica_transformer') |
|
364 | 30 | ->addDefaultsIfNotSet() |
|
365 | 30 | ->children() |
|
366 | 30 | ->scalarNode('service')->end() |
|
367 | 30 | ->end() |
|
368 | 30 | ->end() |
|
369 | 30 | ->arrayNode('persister') |
|
370 | 30 | ->addDefaultsIfNotSet() |
|
371 | 30 | ->children() |
|
372 | 30 | ->enumNode('refresh') |
|
373 | 30 | ->treatTrueLike('true') |
|
374 | 30 | ->treatFalseLike('false') |
|
375 | 30 | ->values(['true', 'wait_for', 'false']) |
|
376 | 30 | ->end() |
|
377 | 30 | ->scalarNode('service')->end() |
|
378 | 30 | ->end() |
|
379 | 30 | ->end() |
|
380 | 30 | ->end(); |
|
381 | |||
382 | 30 | return $node; |
|
383 | } |
||
384 | |||
385 | /** |
||
386 | * @return ArrayNodeDefinition|\Symfony\Component\Config\Definition\Builder\NodeDefinition |
||
387 | */ |
||
388 | 30 | protected function getSerializerNode() |
|
389 | { |
||
390 | 30 | $builder = new TreeBuilder(); |
|
391 | 30 | $node = $builder->root('serializer'); |
|
392 | |||
393 | $node |
||
394 | 30 | ->addDefaultsIfNotSet() |
|
395 | 30 | ->children() |
|
396 | 30 | ->arrayNode('groups') |
|
397 | 30 | ->treatNullLike([]) |
|
398 | 30 | ->prototype('scalar')->end() |
|
399 | 30 | ->end() |
|
400 | 30 | ->scalarNode('version')->end() |
|
401 | 30 | ->booleanNode('serialize_null') |
|
402 | 30 | ->defaultFalse() |
|
403 | 30 | ->end() |
|
404 | 30 | ->end(); |
|
405 | |||
406 | 30 | return $node; |
|
407 | } |
||
408 | |||
409 | /** |
||
410 | * Adds the configuration for the "clients" key. |
||
411 | */ |
||
412 | 30 | private function addClientsSection(ArrayNodeDefinition $rootNode) |
|
413 | { |
||
414 | $rootNode |
||
415 | 30 | ->fixXmlConfig('client') |
|
416 | 30 | ->children() |
|
417 | 30 | ->arrayNode('clients') |
|
418 | 30 | ->useAttributeAsKey('id') |
|
419 | 30 | ->prototype('array') |
|
420 | 30 | ->performNoDeepMerging() |
|
421 | // Elastica names its properties with camel case, support both |
||
422 | 30 | ->beforeNormalization() |
|
423 | 30 | ->ifTrue(function ($v) { |
|
424 | 29 | return isset($v['connection_strategy']); |
|
425 | 30 | }) |
|
426 | 30 | ->then(function ($v) { |
|
427 | 3 | $v['connectionStrategy'] = $v['connection_strategy']; |
|
428 | 3 | unset($v['connection_strategy']); |
|
429 | |||
430 | 3 | return $v; |
|
431 | 30 | }) |
|
432 | 30 | ->end() |
|
433 | // If there is no connections array key defined, assume a single connection. |
||
434 | 30 | ->beforeNormalization() |
|
435 | 30 | ->ifTrue(function ($v) { |
|
436 | 29 | return is_array($v) && !array_key_exists('connections', $v); |
|
437 | 30 | }) |
|
438 | 30 | ->then(function ($v) { |
|
439 | return [ |
||
440 | 29 | 'connections' => [$v], |
|
441 | ]; |
||
442 | 30 | }) |
|
443 | 30 | ->end() |
|
444 | 30 | ->children() |
|
445 | 30 | ->arrayNode('connections') |
|
446 | 30 | ->requiresAtLeastOneElement() |
|
447 | 30 | ->prototype('array') |
|
448 | 30 | ->fixXmlConfig('header') |
|
449 | 30 | ->children() |
|
450 | 30 | ->scalarNode('url') |
|
451 | 30 | ->validate() |
|
452 | 30 | ->ifTrue(function ($url) { |
|
453 | 17 | return $url && '/' !== substr($url, -1); |
|
454 | 30 | }) |
|
455 | 30 | ->then(function ($url) { |
|
456 | 17 | return $url.'/'; |
|
457 | 30 | }) |
|
458 | 30 | ->end() |
|
459 | 30 | ->end() |
|
460 | 30 | ->scalarNode('username')->end() |
|
461 | 30 | ->scalarNode('password')->end() |
|
462 | 30 | ->scalarNode('host')->end() |
|
463 | 30 | ->scalarNode('port')->end() |
|
464 | 30 | ->scalarNode('proxy')->end() |
|
465 | 30 | ->scalarNode('aws_access_key_id')->end() |
|
466 | 30 | ->scalarNode('aws_secret_access_key')->end() |
|
467 | 30 | ->scalarNode('aws_region')->end() |
|
468 | 30 | ->scalarNode('aws_session_token')->end() |
|
469 | 30 | ->booleanNode('ssl')->defaultValue(false)->end() |
|
470 | 30 | ->scalarNode('logger') |
|
471 | 30 | ->defaultValue($this->debug ? 'fos_elastica.logger' : false) |
|
472 | 30 | ->treatNullLike('fos_elastica.logger') |
|
473 | 30 | ->treatTrueLike('fos_elastica.logger') |
|
474 | 30 | ->end() |
|
475 | 30 | ->booleanNode('compression')->defaultValue(false)->end() |
|
476 | 30 | ->arrayNode('headers') |
|
477 | 30 | ->normalizeKeys(false) |
|
478 | 30 | ->useAttributeAsKey('name') |
|
479 | 30 | ->prototype('scalar')->end() |
|
480 | 30 | ->end() |
|
481 | 30 | ->arrayNode('curl') |
|
482 | 30 | ->useAttributeAsKey(CURLOPT_SSL_VERIFYPEER) |
|
483 | 30 | ->prototype('boolean')->end() |
|
484 | 30 | ->end() |
|
485 | 30 | ->scalarNode('transport')->end() |
|
486 | 30 | ->scalarNode('timeout')->end() |
|
487 | 30 | ->scalarNode('connectTimeout')->end() |
|
488 | 30 | ->scalarNode('retryOnConflict') |
|
489 | 30 | ->defaultValue(0) |
|
490 | 30 | ->end() |
|
491 | 30 | ->end() |
|
492 | 30 | ->end() |
|
493 | 30 | ->end() |
|
494 | 30 | ->scalarNode('timeout')->end() |
|
495 | 30 | ->scalarNode('connectTimeout')->end() |
|
496 | 30 | ->scalarNode('headers')->end() |
|
497 | 30 | ->scalarNode('connectionStrategy')->defaultValue('Simple')->end() |
|
498 | 30 | ->end() |
|
499 | 30 | ->end() |
|
500 | 30 | ->end() |
|
501 | 30 | ->end() |
|
502 | ; |
||
503 | 30 | } |
|
504 | |||
505 | /** |
||
506 | * Adds the configuration for the "indexes" key. |
||
507 | */ |
||
508 | 30 | private function addIndexesSection(ArrayNodeDefinition $rootNode) |
|
509 | { |
||
510 | $rootNode |
||
511 | 30 | ->fixXmlConfig('index') |
|
512 | 30 | ->children() |
|
513 | 30 | ->arrayNode('indexes') |
|
514 | 30 | ->useAttributeAsKey('name') |
|
515 | 30 | ->prototype('array') |
|
516 | 30 | ->children() |
|
517 | 30 | ->scalarNode('index_name') |
|
518 | 30 | ->info('Defaults to the name of the index, but can be modified if the index name is different in ElasticSearch') |
|
519 | 30 | ->end() |
|
520 | 30 | ->booleanNode('use_alias')->defaultValue(false)->end() |
|
521 | 30 | ->scalarNode('client')->end() |
|
522 | 30 | ->scalarNode('finder') |
|
523 | 30 | ->treatNullLike(true) |
|
524 | 30 | ->defaultFalse() |
|
525 | 30 | ->end() |
|
526 | 30 | ->arrayNode('type_prototype') |
|
527 | 30 | ->children() |
|
528 | 30 | ->scalarNode('analyzer')->end() |
|
529 | 30 | ->append($this->getPersistenceNode()) |
|
530 | 30 | ->append($this->getSerializerNode()) |
|
531 | 30 | ->end() |
|
532 | 30 | ->end() |
|
533 | 30 | ->variableNode('settings')->defaultValue([])->end() |
|
534 | 30 | ->end() |
|
535 | 30 | ->append($this->getTypesNode()) |
|
536 | 30 | ->end() |
|
537 | 30 | ->end() |
|
538 | 30 | ->end() |
|
539 | ; |
||
540 | 30 | } |
|
541 | } |
||
542 |
This check looks for parameters that are defined as one type in their type hint or doc comment but seem to be used as a narrower type, i.e an implementation of an interface or a subclass.
Consider changing the type of the parameter or doing an instanceof check before assuming your parameter is of the expected type.