We could not synchronize checks via GitHub's checks API since Scrutinizer's GitHub App is not installed for this repository.
1 | <?php |
||
26 | class OverblogGraphQLExtension extends Extension implements PrependExtensionInterface |
||
27 | { |
||
28 | 30 | public function load(array $configs, ContainerBuilder $container) |
|
29 | { |
||
30 | 30 | $this->loadConfigFiles($container); |
|
31 | 30 | $config = $this->treatConfigs($configs, $container); |
|
32 | |||
33 | 30 | $this->setBatchingMethod($config, $container); |
|
34 | 30 | $this->setServicesAliases($config, $container); |
|
35 | 30 | $this->setSchemaBuilderArguments($config, $container); |
|
36 | 30 | $this->setSchemaArguments($config, $container); |
|
37 | 30 | $this->setErrorHandler($config, $container); |
|
38 | 30 | $this->setSecurity($config, $container); |
|
39 | 30 | $this->setConfigBuilders($config, $container); |
|
40 | 30 | $this->setDebugListener($config, $container); |
|
41 | 30 | $this->setDefinitionParameters($config, $container); |
|
42 | 30 | $this->setClassLoaderListener($config, $container); |
|
43 | 30 | $this->setCompilerCacheWarmer($config, $container); |
|
44 | |||
45 | 30 | $container->setParameter($this->getAlias().'.resources_dir', realpath(__DIR__.'/../Resources')); |
|
46 | 30 | } |
|
47 | |||
48 | 28 | public function prepend(ContainerBuilder $container) |
|
58 | |||
59 | 30 | public function getAlias() |
|
63 | |||
64 | 30 | public function getConfiguration(array $config, ContainerBuilder $container) |
|
71 | |||
72 | 30 | private function loadConfigFiles(ContainerBuilder $container) |
|
73 | { |
||
74 | 30 | $loader = new YamlFileLoader($container, new FileLocator(__DIR__.'/../Resources/config')); |
|
75 | 30 | $loader->load('services.yml'); |
|
76 | 30 | $loader->load('graphql_types.yml'); |
|
77 | 30 | $loader->load('expression_language_functions.yml'); |
|
78 | 30 | $loader->load('definition_config_processors.yml'); |
|
79 | 30 | } |
|
80 | |||
81 | 30 | private function setCompilerCacheWarmer(array $config, ContainerBuilder $container) |
|
82 | { |
||
83 | 30 | if ($config['definitions']['auto_compile']) { |
|
84 | 29 | $definition = $container->setDefinition( |
|
85 | 29 | CompileCacheWarmer::class, |
|
86 | 29 | new Definition(CompileCacheWarmer::class) |
|
87 | ); |
||
88 | 29 | $definition->setArguments([new Reference($this->getAlias().'.cache_compiler')]); |
|
89 | 29 | $definition->addTag('kernel.cache_warmer', ['priority' => 50]); |
|
90 | } |
||
91 | 30 | } |
|
92 | |||
93 | 30 | private function setClassLoaderListener(array $config, ContainerBuilder $container) |
|
94 | { |
||
95 | 30 | $container->setParameter($this->getAlias().'.use_classloader_listener', $config['definitions']['use_classloader_listener']); |
|
96 | 30 | if ($config['definitions']['use_classloader_listener']) { |
|
97 | 29 | $definition = $container->setDefinition( |
|
98 | 29 | $this->getAlias().'.event_listener.classloader_listener', |
|
99 | 29 | new Definition(ClassLoaderListener::class) |
|
100 | ); |
||
101 | 29 | $definition->setPublic(true); |
|
102 | 29 | $definition->setArguments([new Reference($this->getAlias().'.cache_compiler')]); |
|
103 | 29 | $definition->addTag('kernel.event_listener', ['event' => 'kernel.request', 'method' => 'load', 'priority' => 255]); |
|
104 | 29 | $definition->addTag('kernel.event_listener', ['event' => 'console.command', 'method' => 'load', 'priority' => 255]); |
|
105 | } |
||
106 | 30 | } |
|
107 | |||
108 | 30 | private function setDefinitionParameters(array $config, ContainerBuilder $container) |
|
109 | { |
||
110 | // auto mapping |
||
111 | 30 | $container->setParameter($this->getAlias().'.auto_mapping.enabled', $config['definitions']['auto_mapping']['enabled']); |
|
112 | 30 | $container->setParameter($this->getAlias().'.auto_mapping.directories', $config['definitions']['auto_mapping']['directories']); |
|
113 | // generator and config |
||
114 | 30 | $container->setParameter($this->getAlias().'.default_resolver', $config['definitions']['default_resolver']); |
|
115 | 30 | $container->setParameter($this->getAlias().'.class_namespace', $config['definitions']['class_namespace']); |
|
116 | 30 | $container->setParameter($this->getAlias().'.cache_dir', $config['definitions']['cache_dir']); |
|
117 | 30 | } |
|
118 | |||
119 | 30 | private function setBatchingMethod(array $config, ContainerBuilder $container) |
|
120 | { |
||
121 | 30 | $container->setParameter($this->getAlias().'.batching_method', $config['batching_method']); |
|
122 | 30 | } |
|
123 | |||
124 | 30 | private function setDebugListener(array $config, ContainerBuilder $container) |
|
125 | { |
||
126 | 30 | if ($config['definitions']['show_debug_info']) { |
|
127 | 1 | $definition = $container->setDefinition( |
|
128 | 1 | DebugListener::class, |
|
129 | 1 | new Definition(DebugListener::class) |
|
130 | ); |
||
131 | 1 | $definition->addTag('kernel.event_listener', ['event' => Events::PRE_EXECUTOR, 'method' => 'onPreExecutor']); |
|
132 | 1 | $definition->addTag('kernel.event_listener', ['event' => Events::POST_EXECUTOR, 'method' => 'onPostExecutor']); |
|
133 | } |
||
134 | 30 | } |
|
135 | |||
136 | 30 | private function setConfigBuilders(array $config, ContainerBuilder $container) |
|
137 | { |
||
138 | 30 | $useObjectToAddResource = method_exists($container, 'addObjectResource'); |
|
139 | 30 | $objectToAddResourceMethod = $useObjectToAddResource ? 'addObjectResource' : 'addClassResource'; |
|
140 | |||
141 | 30 | foreach (BuilderProcessor::BUILDER_TYPES as $type) { |
|
142 | 30 | if (!empty($config['definitions']['builders'][$type])) { |
|
143 | 1 | foreach ($config['definitions']['builders'][$type] as $params) { |
|
144 | 1 | $object = $useObjectToAddResource ? $params['class'] : new \ReflectionClass($params['class']); |
|
145 | 1 | $container->$objectToAddResourceMethod($object); |
|
146 | 30 | BuilderProcessor::addBuilderClass($params['alias'], $type, $params['class']); |
|
147 | } |
||
148 | } |
||
149 | } |
||
150 | 30 | } |
|
151 | |||
152 | 30 | private function treatConfigs(array $configs, ContainerBuilder $container, $forceReload = false) |
|
163 | |||
164 | 30 | private function setSecurity(array $config, ContainerBuilder $container) |
|
170 | |||
171 | 30 | private function setErrorHandler(array $config, ContainerBuilder $container) |
|
172 | { |
||
173 | 30 | if ($config['errors_handler']['enabled']) { |
|
174 | 30 | $id = $this->getAlias().'.error_handler'; |
|
175 | 30 | $errorHandlerDefinition = $container->setDefinition($id, new Definition(ErrorHandler::class)); |
|
176 | 30 | $errorHandlerDefinition->setPublic(false) |
|
177 | 30 | ->setArguments( |
|
178 | [ |
||
204 | |||
205 | 30 | private function setSchemaBuilderArguments(array $config, ContainerBuilder $container) |
|
210 | |||
211 | 30 | private function setSchemaArguments(array $config, ContainerBuilder $container) |
|
236 | |||
237 | 30 | private function setServicesAliases(array $config, ContainerBuilder $container) |
|
246 | |||
247 | /** |
||
248 | * Returns a list of custom exceptions mapped to error/warning classes. |
||
249 | * |
||
250 | * @param array $exceptionConfig |
||
251 | * |
||
252 | * @return array Custom exception map, [exception => UserError/UserWarning] |
||
253 | */ |
||
254 | 30 | private function buildExceptionMap(array $exceptionConfig) |
|
270 | } |
||
271 |
Unless you are absolutely sure that the expression can never be null because of other conditions, we strongly recommend to add an additional type check to your code: