Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit f901285

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

File tree

1 file changed

+59
-29
lines changed

1 file changed

+59
-29
lines changed

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

Lines changed: 59 additions & 29 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;
@@ -41,6 +43,12 @@
4143
use Symfony\Component\Yaml\Yaml;
4244
use Symfony\Component\Console\Application;
4345
use Symfony\Component\Translation\Translator;
46+
use Symfony\Component\Validator\Validation;
47+
use Symfony\Component\Templating\PhpEngine;
48+
use Symfony\Component\Security\Csrf\CsrfToken;
49+
use Symfony\Component\Security\Core\Exception\AuthenticationException;
50+
use Symfony\Component\Form\Form;
51+
use Symfony\Component\Asset\Package;
4452

4553
/**
4654
* FrameworkExtension.
@@ -160,28 +168,33 @@ public function load(array $configs, ContainerBuilder $container)
160168
$this->registerRequestConfiguration($config['request'], $container, $loader);
161169
}
162170

171+
$container->addResource(new ClassExistenceResource(Validation::class));
172+
$container->addResource(new ClassExistenceResource(Form::class));
173+
163174
if ($this->isConfigEnabled($container, $config['form'])) {
164175
$this->formConfigEnabled = true;
165176
$this->registerFormConfiguration($config, $container, $loader);
166177
$config['validation']['enabled'] = true;
167178

168-
if (!class_exists('Symfony\Component\Validator\Validation')) {
179+
if (!class_exists(Validation::class)) {
169180
throw new LogicException('The Validator component is required to use the Form component.');
170181
}
171182
}
172183

173184
$this->registerSecurityCsrfConfiguration($config['csrf_protection'], $container, $loader);
174185

175186
if ($this->isConfigEnabled($container, $config['assets'])) {
176-
if (!class_exists('Symfony\Component\Asset\Package')) {
187+
$container->addResource(new ClassExistenceResource(Package::class));
188+
if (!class_exists(Package::class)) {
177189
throw new LogicException('Asset support cannot be enabled as the Asset component is not installed.');
178190
}
179191

180192
$this->registerAssetsConfiguration($config['assets'], $container, $loader);
181193
}
182194

183195
if ($this->isConfigEnabled($container, $config['templating'])) {
184-
if (!class_exists('Symfony\Component\Templating\PhpEngine')) {
196+
$container->addResource(new ClassExistenceResource(PhpEngine::class));
197+
if (!class_exists(PhpEngine::class)) {
185198
throw new LogicException('Templating support cannot be enabled as the Templating component is not installed.');
186199
}
187200

@@ -527,6 +540,7 @@ private function registerDebugConfiguration(array $config, ContainerBuilder $con
527540
$definition->replaceArgument(4, $debug);
528541
$definition->replaceArgument(6, $debug);
529542

543+
$container->addResource(new ClassExistenceResource(DebugProcessor::class));
530544
if ($debug && class_exists(DebugProcessor::class)) {
531545
$definition = new Definition(DebugProcessor::class);
532546
$definition->setPublic(false);
@@ -862,40 +876,46 @@ private function registerTranslatorConfiguration(array $config, ContainerBuilder
862876

863877
// Discover translation directories
864878
$dirs = array();
865-
if (class_exists('Symfony\Component\Validator\Validation')) {
866-
$r = new \ReflectionClass('Symfony\Component\Validator\Validation');
879+
if (class_exists(Validation::class)) {
880+
$r = new \ReflectionClass(Validation::class);
867881

868882
$dirs[] = dirname($r->getFileName()).'/Resources/translations';
869883
}
870-
if (class_exists('Symfony\Component\Form\Form')) {
871-
$r = new \ReflectionClass('Symfony\Component\Form\Form');
884+
if (class_exists(Form::class)) {
885+
$r = new \ReflectionClass(Form::class);
872886

873887
$dirs[] = dirname($r->getFileName()).'/Resources/translations';
874888
}
875-
if (class_exists('Symfony\Component\Security\Core\Exception\AuthenticationException')) {
876-
$r = new \ReflectionClass('Symfony\Component\Security\Core\Exception\AuthenticationException');
889+
890+
$container->addResource(new ClassExistenceResource(AuthenticationException::class));
891+
if (class_exists(AuthenticationException::class)) {
892+
$r = new \ReflectionClass(AuthenticationException::class);
877893

878894
$dirs[] = dirname(dirname($r->getFileName())).'/Resources/translations';
879895
}
880896
$rootDir = $container->getParameter('kernel.root_dir');
881897
foreach ($container->getParameter('kernel.bundles_metadata') as $name => $bundle) {
882-
if (is_dir($dir = $bundle['path'].'/Resources/translations')) {
898+
$container->addResource(new FileExistenceResource($dir = $bundle['path'].'/Resources/translations'));
899+
if (is_dir($dir)) {
883900
$dirs[] = $dir;
884901
}
885-
if (is_dir($dir = $rootDir.sprintf('/Resources/%s/translations', $name))) {
902+
$container->addResource(new FileExistenceResource($dir = $rootDir.sprintf('/Resources/%s/translations', $name)));
903+
if (is_dir($dir)) {
886904
$dirs[] = $dir;
887905
}
888906
}
889907

890908
foreach ($config['paths'] as $dir) {
909+
$container->addResource(new FileExistenceResource($dir));
891910
if (is_dir($dir)) {
892911
$dirs[] = $dir;
893912
} else {
894913
throw new \UnexpectedValueException(sprintf('%s defined in translator.paths does not exist or is not a directory', $dir));
895914
}
896915
}
897916

898-
if (is_dir($dir = $rootDir.'/Resources/translations')) {
917+
$container->addResource(new FileExistenceResource($dir = $rootDir.'/Resources/translations'));
918+
if (is_dir($dir)) {
899919
$dirs[] = $dir;
900920
}
901921

@@ -946,7 +966,7 @@ private function registerValidationConfiguration(array $config, ContainerBuilder
946966
return;
947967
}
948968

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

@@ -958,7 +978,7 @@ private function registerValidationConfiguration(array $config, ContainerBuilder
958978

959979
$files = array('xml' => array(), 'yml' => array());
960980
$this->getValidatorMappingFiles($container, $files);
961-
$this->getValidatorMappingFilesFromConfig($config, $files);
981+
$this->getValidatorMappingFilesFromConfig($container, $config, $files);
962982

963983
if (!empty($files['xml'])) {
964984
$validatorBuilder->addMethodCall('addXmlMappings', array($files['xml']));
@@ -1001,26 +1021,27 @@ private function registerValidationConfiguration(array $config, ContainerBuilder
10011021

10021022
private function getValidatorMappingFiles(ContainerBuilder $container, array &$files)
10031023
{
1004-
if (interface_exists('Symfony\Component\Form\FormInterface')) {
1005-
$reflClass = new \ReflectionClass('Symfony\Component\Form\FormInterface');
1024+
if (class_exists(Form::class)) {
1025+
$reflClass = new \ReflectionClass(Form::class);
10061026
$files['xml'][] = $file = dirname($reflClass->getFileName()).'/Resources/config/validation.xml';
10071027
$container->addResource(new FileResource($file));
10081028
}
10091029

10101030
foreach ($container->getParameter('kernel.bundles_metadata') as $bundle) {
10111031
$dirname = $bundle['path'];
10121032

1013-
if (is_file($file = $dirname.'/Resources/config/validation.yml')) {
1033+
$container->addResource(new FileExistenceResource($file = $dirname.'/Resources/config/validation.yml'));
1034+
if (is_file($file)) {
10141035
$files['yml'][] = $file;
1015-
$container->addResource(new FileResource($file));
10161036
}
10171037

1018-
if (is_file($file = $dirname.'/Resources/config/validation.xml')) {
1038+
$container->addResource(new FileExistenceResource($file = $dirname.'/Resources/config/validation.xml'));
1039+
if (is_file($file)) {
10191040
$files['xml'][] = $file;
1020-
$container->addResource(new FileResource($file));
10211041
}
10221042

1023-
if (is_dir($dir = $dirname.'/Resources/config/validation')) {
1043+
$container->addResource(new FileExistenceResource($dir = $dirname.'/Resources/config/validation'));
1044+
if (is_dir($dir)) {
10241045
$this->getValidatorMappingFilesFromDir($dir, $files);
10251046
$container->addResource(new DirectoryResource($dir));
10261047
}
@@ -1035,9 +1056,10 @@ private function getValidatorMappingFilesFromDir($dir, array &$files)
10351056
}
10361057
}
10371058

1038-
private function getValidatorMappingFilesFromConfig(array $config, array &$files)
1059+
private function getValidatorMappingFilesFromConfig(ContainerBuilder $container, array $config, array &$files)
10391060
{
10401061
foreach ($config['mapping']['paths'] as $path) {
1062+
$container->addResource(new FileExistenceResource($path));
10411063
if (is_dir($path)) {
10421064
$this->getValidatorMappingFilesFromDir($path, $files);
10431065
} elseif (is_file($path)) {
@@ -1059,7 +1081,8 @@ private function registerAnnotationsConfiguration(array $config, ContainerBuilde
10591081
return;
10601082
}
10611083

1062-
if (!class_exists('Doctrine\Common\Annotations\Annotation')) {
1084+
$container->addResource(new ClassExistenceResource(Annotation::class));
1085+
if (!class_exists(Annotation::class)) {
10631086
throw new LogicException('Annotations cannot be enabled as the Doctrine Annotation library is not installed.');
10641087
}
10651088

@@ -1130,6 +1153,7 @@ private function registerSecurityCsrfConfiguration(array $config, ContainerBuild
11301153
return;
11311154
}
11321155

1156+
$container->addResource(new ClassExistenceResource(CsrfToken::class));
11331157
if (!class_exists('Symfony\Component\Security\Csrf\CsrfToken')) {
11341158
throw new LogicException('CSRF support cannot be enabled as the Security CSRF component is not installed.');
11351159
}
@@ -1151,33 +1175,38 @@ private function registerSecurityCsrfConfiguration(array $config, ContainerBuild
11511175
*/
11521176
private function registerSerializerConfiguration(array $config, ContainerBuilder $container, XmlFileLoader $loader)
11531177
{
1154-
if (class_exists('Symfony\Component\Serializer\Normalizer\DataUriNormalizer')) {
1178+
$container->addResource(new ClassExistenceResource(DataUriNormalizer::class));
1179+
if (class_exists(DataUriNormalizer::class)) {
11551180
// Run after serializer.normalizer.object
11561181
$definition = $container->register('serializer.normalizer.data_uri', DataUriNormalizer::class);
11571182
$definition->setPublic(false);
11581183
$definition->addTag('serializer.normalizer', array('priority' => -920));
11591184
}
11601185

1161-
if (class_exists('Symfony\Component\Serializer\Normalizer\DateTimeNormalizer')) {
1186+
$container->addResource(new ClassExistenceResource(DateTimeNormalizer::class));
1187+
if (class_exists(DateTimeNormalizer::class)) {
11621188
// Run before serializer.normalizer.object
11631189
$definition = $container->register('serializer.normalizer.datetime', DateTimeNormalizer::class);
11641190
$definition->setPublic(false);
11651191
$definition->addTag('serializer.normalizer', array('priority' => -910));
11661192
}
11671193

1168-
if (class_exists('Symfony\Component\Serializer\Normalizer\JsonSerializableNormalizer')) {
1194+
$container->addResource(new ClassExistenceResource(JsonSerializableNormalizer::class));
1195+
if (class_exists(JsonSerializableNormalizer::class)) {
11691196
// Run before serializer.normalizer.object
11701197
$definition = $container->register('serializer.normalizer.json_serializable', JsonSerializableNormalizer::class);
11711198
$definition->setPublic(false);
11721199
$definition->addTag('serializer.normalizer', array('priority' => -900));
11731200
}
11741201

1202+
$container->addResource(new ClassExistenceResource(YamlEncoder::class));
11751203
if (class_exists(YamlEncoder::class) && defined('Symfony\Component\Yaml\Yaml::DUMP_OBJECT')) {
11761204
$definition = $container->register('serializer.encoder.yaml', YamlEncoder::class);
11771205
$definition->setPublic(false);
11781206
$definition->addTag('serializer.encoder');
11791207
}
11801208

1209+
$container->addResource(new ClassExistenceResource(CsvEncoder::class));
11811210
if (class_exists(CsvEncoder::class)) {
11821211
$definition = $container->register('serializer.encoder.csv', CsvEncoder::class);
11831212
$definition->setPublic(false);
@@ -1213,15 +1242,16 @@ private function registerSerializerConfiguration(array $config, ContainerBuilder
12131242
$container->addResource(new FileResource($file));
12141243
}
12151244

1216-
if (is_file($file = $dirname.'/Resources/config/serialization.yml')) {
1245+
$container->addResource(new FileExistenceResource($file = $dirname.'/Resources/config/serialization.yml'));
1246+
if (is_file($file)) {
12171247
$definition = new Definition('Symfony\Component\Serializer\Mapping\Loader\YamlFileLoader', array($file));
12181248
$definition->setPublic(false);
12191249

12201250
$serializerLoaders[] = $definition;
1221-
$container->addResource(new FileResource($file));
12221251
}
12231252

1224-
if (is_dir($dir = $dirname.'/Resources/config/serialization')) {
1253+
$container->addResource(new FileExistenceResource($dir = $dirname.'/Resources/config/serialization'));
1254+
if (is_dir($dir)) {
12251255
foreach (Finder::create()->followLinks()->files()->in($dir)->name('*.xml') as $file) {
12261256
$definition = new Definition('Symfony\Component\Serializer\Mapping\Loader\XmlFileLoader', array($file->getPathname()));
12271257
$definition->setPublic(false);

0 commit comments

Comments
 (0)