10000 Add more (Class|Directory|File)ExistenceResource · symfony/symfony@772970b · GitHub
[go: up one dir, main page]

Skip to content

Commit 772970b

Browse files
committed
Add more (Class|Directory|File)ExistenceResource
1 parent b1a2af6 commit 772970b

File tree

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,8 @@
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;
34+
use Symfony\Component\Config\Resource\DirectoryExistenceResource;
3235
use Symfony\Component\PropertyAccess\PropertyAccessor;
3336
use Symfony\Component\Serializer\Encoder\YamlEncoder;
3437
use Symfony\Component\Serializer\Encoder\CsvEncoder;
@@ -41,6 +44,11 @@
4144
use Symfony\Component\Yaml\Yaml;
4245
use Symfony\Component\Console\Application;
4346
use Symfony\Component\Translation\Translator;
47+
use Symfony\Component\Validator\Validation;
48+
use Symfony\Component\Templating\PhpEngine;
49+
use Symfony\Component\Security\Csrf\CsrfToken;
50+
use Symfony\Component\Security\Core\Exception\AuthenticationException;
51+
use Symfony\Component\Form\Form;
4452

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

171+
$container->addResource(new ClassExistenceResource(Validation::class));
172+
163173
if ($this->isConfigEnabled($container, $config['form'])) {
164174
$this->formConfigEnabled = true;
165175
$this->registerFormConfiguration($config, $container, $loader);
166176
$config['validation']['enabled'] = true;
167177

168-
if (!class_exists('Symfony\Component\Validator\Validation')) {
178+
if (!class_exists(Validation::class)) {
169179
throw new LogicException('The Validator component is required to use the Form component.');
170180
}
171181
}
@@ -181,7 +191,8 @@ public function load(array $configs, ContainerBuilder $container)
181191
}
182192

183193
if ($this->isConfigEnabled($container, $config['templating'])) {
184-
if (!class_exists('Symfony\Component\Templating\PhpEngine')) {
194+
$container->addResource(new ClassExistenceResource(PhpEngine::class));
195+
if (!class_exists(PhpEngine::class)) {
185196
throw new LogicException('Templating support cannot be enabled as the Templating component is not installed.');
186197
}
187198

@@ -862,18 +873,20 @@ private function registerTranslatorConfiguration(array $config, ContainerBuilder
862873

863874
// Discover translation directories
864875
$dirs = array();
865-
if (class_exists('Symfony\Component\Validator\Validation')) {
866-
$r = new \ReflectionClass('Symfony\Component\Validator\Validation');
876+
if (class_exists(Validation::class)) {
877+
$r = new \ReflectionClass(Validation::class);
867878

868879
$dirs[] = dirname($r->getFileName()).'/Resources/translations';
869880
}
870-
if (class_exists('Symfony\Component\Form\Form')) {
871-
$r = new \ReflectionClass('Symfony\Component\Form\Form');
881+
if (class_exists(Form::class)) {
882+
$r = new \ReflectionClass(Form::class);
872883

873884
$dirs[] = dirname($r->getFileName()).'/Resources/translations';
874885
}
875-
if (class_exists('Symfony\Component\Security\Core\Exception\AuthenticationException')) {
876-
$r = new \ReflectionClass('Symfony\Component\Security\Core\Exception\AuthenticationException');
886+
887+
$container->addResource(new ClassExistenceResource(AuthenticationException::class));
888+
if (class_exists(AuthenticationException::class)) {
889+
$r = new \ReflectionClass(AuthenticationException::class);
877890

878891
$dirs[] = dirname(dirname($r->getFileName())).'/Resources/translations';
879892
}
@@ -902,6 +915,7 @@ private function registerTranslatorConfiguration(array $config, ContainerBuilder
902915
// Register translation resources
903916
if ($dirs) {
904917
foreach ($dirs as $dir) {
918+
$container->addResource(new DirectoryExistenceResource($dir));
905919
$container->addResource(new DirectoryResource($dir));
906920
}
907921

@@ -946,7 +960,7 @@ private function registerValidationConfiguration(array $config, ContainerBuilder
946960
return;
947961
}
948962

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

@@ -958,7 +972,7 @@ private function registerValidationConfiguration(array $config, ContainerBuilder
958972

959973
$files = array('xml' => array(), 'yml' => array());
960974
$this->getValidatorMappingFiles($container, $files);
961-
$this->getValidatorMappingFilesFromConfig($config, $files);
975+
$this->getValidatorMappingFilesFromConfig($container, $config, $files);
962976

963977
if (!empty($files['xml'])) {
964978
$validatorBuilder->addMethodCall('addXmlMappings', array($files['xml']));
@@ -1001,26 +1015,30 @@ private function registerValidationConfiguration(array $config, ContainerBuilder
10011015

10021016
private function getValidatorMappingFiles(ContainerBuilder $container, array &$files)
10031017
{
1004-
if (interface_exists('Symfony\Component\Form\FormInterface')) {
1005-
$reflClass = new \ReflectionClass('Symfony\Component\Form\FormInterface');
1018+
$container->addResource(new ClassExistenceResource(Form::class));
1019+
if (class_exists(Form::class)) {
1020+
$reflClass = new \ReflectionClass(Form::class);
10061021
$files['xml'][] = $file = dirname($reflClass->getFileName()).'/Resources/config/validation.xml';
10071022
$container->addResource(new FileResource($file));
10081023
}
10091024

10101025
foreach ($container->getParameter('kernel.bundles_metadata') as $bundle) {
10111026
$dirname = $bundle['path'];
10121027

1013-
if (is_file($file = $dirname.'/Resources/config/validation.yml')) {
1028+
$container->addResource(new FileExistenceResource($file = $dirname.'/Resources/config/validation.yml'));
1029+
if (is_file($file)) {
10141030
$files['yml'][] = $file;
10151031
$container->addResource(new FileResource($file));
10161032
}
10171033

1018-
if (is_file($file = $dirname.'/Resources/config/validation.xml')) {
1034+
$container->addResource(new FileExistenceResource($file = $dirname.'/Resources/config/validation.xml'));
1035+
if (is_file($file)) {
10191036
$files['xml'][] = $file;
10201037
$container->addResource(new FileResource($file));
10211038
}
10221039

1023-
if (is_dir($dir = $dirname.'/Resources/config/validation')) {
1040+
$container->addResource(new DirectoryExistenceResource($dir = $dirname.'/Resources/config/validation'));
1041+
if (is_dir($dir)) {
10241042
$this->getValidatorMappingFilesFromDir($dir, $files);
10251043
$container->addResource(new DirectoryResource($dir));
10261044
}
@@ -1035,12 +1053,14 @@ private function getValidatorMappingFilesFromDir($dir, array &$files)
10351053
}
10361054
}
10371055

1038-
private function getValidatorMappingFilesFromConfig(array $config, array &$files)
1056+
private function getValidatorMappingFilesFromConfig(ContainerBuilder $container, array $config, array &$files)
10391057
{
10401058
foreach ($config['mapping']['paths'] as $path) {
10411059
if (is_dir($path)) {
1060+
$container->addResource(new DirectoryExistenceResource($path));
10421061
$this->getValidatorMappingFilesFromDir($path, $files);
10431062
} elseif (is_file($path)) {
1063+
$container->addResource(new FileExistenceResource($path));
10441064
if (preg_match('/\.(xml|ya?ml)$/', $path, $matches)) {
10451065
$extension = $matches[1];
10461066
$files['yaml' === $extension ? 'yml' : $extension][] = $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);
@@ -1219,9 +1246,11 @@ private function registerSerializerConfiguration(array $config, ContainerBuilder
12191246

12201247
$serializerLoaders[] = $definition;
12211248
$container->addResource(new FileResource($file));
1249+
$container->addResource(new FileExistenceResource($file));
12221250
}
12231251

1224-
if (is_dir($dir = $dirname.'/Resources/config/serialization')) {
1252+
$container->addResource(new DirectoryExistenceResource($dir = $dirname.'/Resources/config/serialization'));
1253+
if (is_dir($dir)) {
12251254
foreach (Finder::create()->followLinks()->files()->in($dir)->name('*.xml') as $file) {
12261255
$definition = new Definition('Symfony\Component\Serializer\Mapping\Loader\XmlFileLoader', array($file->getPathname()));
12271256
$definition->setPublic(false);
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212
namespace Symfony\Bundle\TwigBundle\DependencyInjection;
1313

1414
use Symfony\Component\Config\FileLocator;
15-
use Symfony\Component\Config\Resource\FileExistenceResource;
15+
use Symfony\Component\Config\Resource\DirectoryExistenceResource;
1616
use Symfony\Component\DependencyInjection\ContainerBuilder;
1717
use Symfony\Component\DependencyInjection\Reference;
1818
use Symfony\Component\DependencyInjection\Loader\XmlFileLoader;
@@ -111,7 +111,7 @@ public function load(array $configs, ContainerBuilder $container)
111111
if (is_dir($dir = $container->getParameter('kernel.root_dir').'/Resources/views')) {
112112
$twigFilesystemLoaderDefinition->addMethodCall('addPath', array($dir));
113113
}
114-
$container->addResource(new FileExistenceResource($dir));
114+
$container->addResource(new DirectoryExistenceResource($dir));
115115

116116
if (!empty($config['globals'])) {
117117
$def = $container->getDefinition('twig');
@@ -167,12 +167,12 @@ private function getBundleHierarchy(ContainerBuilder $container)
167167
if (is_dir($dir = $container->getParameter('kernel.root_dir').'/Resources/'.$name.'/views')) {
168168
$bundleHierarchy[$name]['paths'][] = $dir;
169169
}
170-
$container->addResource(new FileExistenceResource($dir));
170+
$container->addResource(new DirectoryExistenceResource($dir));
171171

172172
if (is_dir($dir = $bundle['path'].'/Resources/views')) {
173173
$bundleHierarchy[$name]['paths'][] = $dir;
174174
}
175-
$container->addResource(new FileExistenceResource($dir));
175+
$container->addResource(new DirectoryExistenceResource($dir));
176176

177177
if (null === $bundle['parent']) {
178178
continue;
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@
1717
],
1818
"require": {
1919
"php": ">=5.5.9",
20-
"symfony/config": "~3.2",
20+
"symfony/config": "~3.3",
2121
"symfony/twig-bridge": "^3.2.1",
2222
"symfony/http-foundation": "~2.8|~3.0",
2323
"symfony/http-kernel": "~2.8.16|~3.1.9|^3.2.2",
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,8 @@
1515
* FileExistenceResource represents a resource stored on the filesystem.
1616
* Freshness is only evaluated against resource creation or deletion.
1717
*
18+
* The resource can be a file or a directory.
19+
*
1820
* @author Charles-Henri Bruyand <charleshenri.bruyand@gmail.com>
1921
*/
2022
class FileExistenceResource implements SelfCheckingResourceInterface, \Serializable
3234
{
3335
$this->resource = (string) $resource;
3436
$this->exists = file_exists($resource);
35-
36-
if (is_dir($resource)) {
37-
@trigger_error(sprintf('Passing a directory to %s is deprecated since version 3.3, use %s instead.', __CLASS__, DirectoryExistenceResource::class), E_USER_DEPRECATED);
38-
}
3937
}
4038

4139
/**