8000 Add missing (Class|File)ExistenceResource checks · symfony/symfony@f6122ea · GitHub
[go: up one dir, main page]

Skip to content

Commit f6122ea

Browse files
committed
Add missing (Class|File)ExistenceResource checks
1 parent f19dbc9 commit f6122ea

File tree

1 file changed

+57
-28
lines changed

1 file changed

+57
-28
lines changed

src/Symfony/Bundle/FrameworkBundle/DependencyInjection/FrameworkExtension.php

Lines changed: 57 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
namespace Symfony\Bundle\FrameworkBundle\DependencyInjection;
1313

1414
use Doctrine\Common\Annotations\Reader;
15+
use Doctrine\Common\Annotations\Annotation;
1516
use Symfony\Bridge\Monolog\Processor\DebugProcessor;
1617
use Symfony\Component\Cache\Adapter\AdapterInterface;
1718
use Symfony\Component\Config\Loader\LoaderInterface;
@@ -29,6 +30,7 @@
2930
use Symfony\Component\HttpKernel\DependencyInjection\Extension;
3031
use Symfony\Component\Config\FileLocator;
3132
use Symfony\Component\Config\Resource\ClassExistenceResource;
33+
use Symfony\Component\Config\Resource\FileExistenceResource;
3234
use Symfony\Component\PropertyAccess\PropertyAccessor;
3335
use Symfony\Component\Serializer\Encoder\YamlEncoder;
3436
use Symfony\Component\Serializer\Encoder\CsvEncoder;
@@ -40,7 +42,10 @@
4042
use Symfony\Component\Workflow\SupportStrategy\ClassInstanceSupportStrategy;
4143
use Symfony\Component\Yaml\Yaml;
4244
use Symfony\Component\Console\Application;
43-
use Symfony\Component\Translation\Translator;
45+
use Symfony\Component\Validator\Validation;
46+
use Symfony\Component\Security\Csrf\CsrfToken;
47+
use Symfony\Component\Security\Core\Exception\AuthenticationException;
48+
use Symfony\Component\Form\Form;
4449

4550
/**
4651
* FrameworkExtension.
@@ -106,16 +111,15 @@ public function load(array $configs, ContainerBuilder $container)
106111
// default in the Form and Validator component). If disabled, an identity
107112
// translator will be used and everything will still work as expected.
108113
if ($this->isConfigEnabled(< 8000 span class=pl-s1>$container, $config['translator']) || $this->isConfigEnabled($container, $config['form']) || $this->isConfigEnabled($container, $config['validation'])) {
109-
$container->addResource(new ClassExistenceResource(Translator::class));
110-
if (!class_exists(Translator::class) && $this->isConfigEnabled($container, $config['translator'])) {
114+
if (!class_exists('Symfony\Component\Translation\Translator') && $this->isConfigEnabled($container, $config['translator'])) {
111115
throw new LogicException('Translation support cannot be enabled as the Translation component is not installed.');
112116
}
113117

114-
if (!class_exists(Translator::class) && $this->isConfigEnabled($container, $config['form'])) {
118+
if (!class_exists('Symfony\Component\Translation\Translator') && $this->isConfigEnabled($container, $config['form'])) {
115119
throw new LogicException('Form support cannot be enabled as the Translation component is not installed.');
116120
}
117121

118-
if (!class_exists(Translator::class) && $this->isConfigEnabled($container, $config['validation'])) {
122+
if (!class_exists('Symfony\Component\Translation\Translator') && $this->isConfigEnabled($container, $config['validation'])) {
119123
throw new LogicException('Validation support cannot be enabled as the Translation component is not installed.');
120124
}
121125

@@ -160,12 +164,15 @@ public function load(array $configs, ContainerBuilder $container)
160164
$this->registerRequestConfiguration($config['request'], $container, $loader);
161165
}
162166

167+
$container->addResource(new ClassExistenceResource(Validation::class));
168+
$container->addResource(new ClassExistenceResource(Form::class));
169+
163170
if ($this->isConfigEnabled($container, $config['form'])) {
164171
$this->formConfigEnabled = true;
165172
$this->registerFormConfiguration($config, $container, $loader);
166173
$config['validation']['enabled'] = true;
167174

168-
if (!class_exists('Symfony\Component\Validator\Validation')) {
175+
if (!class_exists(Validation::class)) {
169176
throw new LogicException('The Validator component is required to use the Form component.');
170177
}
171178
}
@@ -527,6 +534,7 @@ private function registerDebugConfiguration(array $config, ContainerBuilder $con
527534
$definition->replaceArgument(4, $debug);
528535
$definition->replaceArgument(6, $debug);
529536

537+
$container->addResource(new ClassExistenceResource(DebugProcessor::class));
530538
if ($debug && class_exists(DebugProcessor::class)) {
531539
$definition = new Definition(DebugProcessor::class);
532540
$definition->setPublic(false);
@@ -862,41 +870,51 @@ private function registerTranslatorConfiguration(array $config, ContainerBuilder
862870

863871
// Discover translation directories
864872
$dirs = array();
865-
if (class_exists('Symfony\Component\Validator\Validation')) {
866-
$r = new \ReflectionClass('Symfony\Component\Validator\Validation');
873+
if (class_exists(Validation::class)) {
874+
$r = new \ReflectionClass(Validation::class);
867875

868876
$dirs[] = dirname($r->getFileName()).'/Resources/translations';
869877
}
870-
if (class_exists('Symfony\Component\Form\Form')) {
871-
$r = new \ReflectionClass('Symfony\Component\Form\Form');
878+
if (class_exists(Form::class)) {
879+
$r = new \ReflectionClass(Form::class);
872880

873881
$dirs[] = dirname($r->getFileName()).'/Resources/translations';
874882
}
875-
if (class_exists('Symfony\Component\Security\Core\Exception\AuthenticationException')) {
876-
$r = new \ReflectionClass('Symfony\Component\Security\Core\Exception\AuthenticationException');
883+
884+
$container->addResource(new ClassExistenceResource(AuthenticationException::class));
885+
if (class_exists(AuthenticationException::class)) {
886+
$r = new F438 \ReflectionClass(AuthenticationException::class);
877887

878888
$dirs[] = dirname(dirname($r->getFileName())).'/Resources/translations';
879889
}
880890
$rootDir = $container->getParameter('kernel.root_dir');
881891
foreach ($container->getParameter('kernel.bundles_metadata') as $name => $bundle) {
882892
if (is_dir($dir = $bundle['path'].'/Resources/translations')) {
883893
$dirs[] = $dir;
894+
} else {
895+
$container->addResource(new FileExistenceResource($dir));
884896
}
885897
if (is_dir($dir = $rootDir.sprintf('/Resources/%s/translations', $name))) {
886898
$dirs[] = $dir;
899+
} else {
900+
$container->addResource(new FileExistenceResource($dir));
887901
}
888902
}
889903

890904
foreach ($config['paths'] as $dir) {
891905
if (is_dir($dir)) {
892906
$dirs[] = $dir;
893907
} else {
908+
$container->addResource(new FileExistenceResource($dir));
909+
894910
throw new \UnexpectedValueException(sprintf('%s defined in translator.paths does not exist or is not a directory', $dir));
895911
}
896912
}
897913

898914
if (is_dir($dir = $rootDir.'/Resources/translations')) {
899915
$dirs[] = $dir;
916+
} else {
917+
$container->addResource(new FileExistenceResource($dir));
900918
}
901919

902920
// Register translation resources
@@ -946,7 +964,7 @@ private function registerValidationConfiguration(array $config, ContainerBuilder
946964
return;
947965
}
948966

949-
if (!class_exists('Symfony\Component\Validator\Validation')) {
967+
if (!class_exists(Validation::class)) {
950968
throw new LogicException('Validation support cannot be enabled as the Validator component is not installed.');
951969
}
952970

@@ -958,7 +976,7 @@ private function registerValidationConfiguration(array $config, ContainerBuilder
958976

959977
$files = array('xml' => array(), 'yml' => array());
960978
$this->getValidatorMappingFiles($container, $files);
961-
$this->getValidatorMappingFilesFromConfig($config, $files);
979+
$this->getValidatorMappingFilesFromConfig($container, $config, $files);
962980

963981
if (!empty($files['xml'])) {
964982
$validatorBuilder->addMethodCall('addXmlMappings', array($files['xml']));
@@ -1001,26 +1019,27 @@ private function registerValidationConfiguration(array $config, ContainerBuilder
10011019

10021020
private function getValidatorMappingFiles(ContainerBuilder $container, array &$files)
10031021
{
1004-
if (interface_exists('Symfony\Component\Form\FormInterface')) {
1005-
$reflClass = new \ReflectionClass('Symfony\Component\Form\FormInterface');
1022+
if (class_exists(Form::class)) {
1023+
$reflClass = new \ReflectionClass(Form::class);
10061024
$files['xml'][] = $file = dirname($reflClass->getFileName()).'/Resources/config/validation.xml';
10071025
$container->addResource(new FileResource($file));
10081026
}
10091027

10101028
foreach ($container->getParameter('kernel.bundles_metadata') as $bundle) {
10111029
$dirname = $bundle['path'];
10121030

1013-
if (is_file($file = $dirname.'/Resources/config/validation.yml')) {
1031+
$container->addResource(new FileExistenceResource($file = $dirname.'/Resources/config/validation.yml'));
1032+
if (is_file($file)) {
10141033
$files['yml'][] = $file;
1015-
$container->addResource(new FileResource($file));
10161034
}
10171035

1018-
if (is_file($file = $dirname.'/Resources/config/validation.xml')) {
1036+
$container->addResource(new FileExistenceResource($file = $dirname.'/Resources/config/validation.xml'));
1037+
if (is_file($file)) {
10191038
$files['xml'][] = $file;
1020-
$container->addResource(new FileResource($file));
10211039
}
10221040

1023-
if (is_dir($dir = $dirname.'/Resources/config/validation')) {
1041+
$container->addResource(new FileExistenceResource($dir = $dirname.'/Resources/config/validation'));
1042+
if (is_dir($dir)) {
10241043
$this->getValidatorMappingFilesFromDir($dir, $files);
10251044
$container->addResource(new DirectoryResource($dir));
10261045
}
@@ -1035,9 +1054,10 @@ private function getValidatorMappingFilesFromDir($dir, array &$files)
10351054
}
10361055
}
10371056

1038-
private function getValidatorMappingFilesFromConfig(array $config, array &$files)
1057+
private function getValidatorMappingFilesFromConfig(ContainerBuilder $container, array $config, array &$files)
10391058
{
10401059
foreach ($config['mapping']['paths'] as $path) {
1060+
$container->addResource(new FileExistenceResource($path));
10411061
if (is_dir($path)) {
10421062
$this->getValidatorMappingFilesFromDir($path, $files);
10431063
} elseif (is_file($path)) {
@@ -1059,7 +1079,8 @@ private function registerAnnotationsConfiguration(array $config, ContainerBuilde
10591079
return;
10601080
}
10611081

1062-
if (!class_exists('Doctrine\Common\Annotations\Annotation')) {
1082+
$container->addResource(new ClassExistenceResource(Annotation::class));
1083+
if (!class_exists(Annotation::class)) {
10631084
throw new LogicException('Annotations cannot be enabled as the Doctrine Annotation library is not installed.');
10641085
}
10651086

@@ -1130,6 +1151,7 @@ private function registerSecurityCsrfConfiguration(array $config, ContainerBuild
11301151
return;
11311152
}
11321153

1154+
$container->addResource(new ClassExistenceResource(CsrfToken::class));
11331155
if (!class_exists('Symfony\Component\Security\Csrf\CsrfToken')) {
11341156
throw new LogicException('CSRF support cannot be enabled as the Security CSRF component is not installed.');
11351157
}
@@ -1151,33 +1173,38 @@ private function registerSecurityCsrfConfiguration(array $config, ContainerBuild
11511173
*/
11521174
private function registerSerializerConfiguration(array $config, ContainerBuilder $container, XmlFileLoader $loader)
11531175
{
1154-
if (class_exists('Symfony\Component\Serializer\Normalizer\DataUriNormalizer')) {
1176+
$container->addResource(new ClassExistenceResource(DataUriNormalizer::class));
1177+
if (class_exists(DataUriNormalizer::class)) {
11551178
// Run after serializer.normalizer.object
11561179
$definition = $container->register('serializer.normalizer.data_uri', DataUriNormalizer::class);
11571180
$definition->setPublic(false);
11581181
$definition->addTag('serializer.normalizer', array('priority' => -920));
11591182
}
11601183

1161-
if (class_exists('Symfony\Component\Serializer\Normalizer\DateTimeNormalizer')) {
1184+
$container->addResource(new ClassExistenceResource(DateTimeNormalizer::class));
1185+
if (class_exists(DateTimeNormalizer::class)) {
11621186
// Run before serializer.normalizer.object
11631187
$definition = $container->register('serializer.normalizer.datetime', DateTimeNormalizer::class);
11641188
$definition->setPublic(false);
11651189
$definition->addTag('serializer.normalizer', array('priority' => -910));
11661190
}
11671191

1168-
if (class_exists('Symfony\Component\Serializer\Normalizer\JsonSerializableNormalizer')) {
1192+
$container->addResource(new ClassExistenceResource(JsonSerializableNormalizer::class));
1193+
if (class_exists(JsonSerializableNormalizer::class)) {
11691194
// Run before serializer.normalizer.object
11701195
$definition = $container->register('serializer.normalizer.json_serializable', JsonSerializableNormalizer::class);
11711196
$definition->setPublic(false);
11721197
$definition->addTag('serializer.normalizer', array('priority' => -900));
11731198
}
11741199

1200+
$container->addResource(new ClassExistenceResource(YamlEncoder::class));
11751201
if (class_exists(YamlEncoder::class) && defined('Symfony\Component\Yaml\Yaml::DUMP_OBJECT')) {
11761202
$definition = $container->register('serializer.encoder.yaml', YamlEncoder::class);
11771203
$definition->setPublic(false);
11781204
$definition->addTag('serializer.encoder');
11791205
}
11801206

1207+
$container->addResource(new ClassExistenceResource(CsvEncoder::class));
11811208
if (class_exists(CsvEncoder::class)) {
11821209
$definition = $container->register('serializer.encoder.csv', CsvEncoder::class);
11831210
$definition->setPublic(false);
@@ -1213,12 +1240,12 @@ private function registerSerializerConfiguration(array $config, ContainerBuilder
12131240
$container->addResource(new FileResource($file));
12141241
}
12151242

1216-
if (is_file($file = $dirname.'/Resources/config/serialization.yml')) {
1243+
$container->addResource(new FileExistenceResource($file = $dirname.'/Resources/config/serialization.yml'));
1244+
if (is_file($file)) {
12171245
$definition = new Definition('Symfony\Component\Serializer\Mapping\Loader\YamlFileLoader', array($file));
12181246
$definition->setPublic(false);
12191247

12201248
$serializerLoaders[] = $definition;
1221-
$container->addResource(new FileResource($file));
12221249
}
12231250

12241251
if (is_dir($dir = $dirname.'/Resources/config/serialization')) {
@@ -1236,6 +1263,8 @@ private function registerSerializerConfiguration(array $config, ContainerBuilder
12361263
}
12371264

12381265
$container->addResource(new DirectoryResource($dir));
1266+
} else {
1267+
$container->addResource(new FileExistenceResource($dir));
12391268
}
12401269
}
12411270

0 commit comments

Comments
 (0)
0