diff --git a/src/Symfony/Bundle/TwigBundle/DependencyInjection/TwigExtension.php b/src/Symfony/Bundle/TwigBundle/DependencyInjection/TwigExtension.php
index a70fd31afe3f8..13826834c02be 100644
--- a/src/Symfony/Bundle/TwigBundle/DependencyInjection/TwigExtension.php
+++ b/src/Symfony/Bundle/TwigBundle/DependencyInjection/TwigExtension.php
@@ -15,7 +15,7 @@
use Symfony\Component\Config\Resource\FileExistenceResource;
use Symfony\Component\Console\Application;
use Symfony\Component\DependencyInjection\ContainerBuilder;
-use Symfony\Component\DependencyInjection\Loader\XmlFileLoader;
+use Symfony\Component\DependencyInjection\Loader\PhpFileLoader;
use Symfony\Component\DependencyInjection\Reference;
use Symfony\Component\HttpKernel\DependencyInjection\Extension;
use Symfony\Component\Mailer\Mailer;
@@ -34,19 +34,19 @@ class TwigExtension extends Extension
{
public function load(array $configs, ContainerBuilder $container)
{
- $loader = new XmlFileLoader($container, new FileLocator(__DIR__.'/../Resources/config'));
- $loader->load('twig.xml');
+ $loader = new PhpFileLoader($container, new FileLocator(__DIR__.'/../Resources/config'));
+ $loader->load('twig.php');
if (class_exists('Symfony\Component\Form\Form')) {
- $loader->load('form.xml');
+ $loader->load('form.php');
}
if (class_exists(Application::class)) {
- $loader->load('console.xml');
+ $loader->load('console.php');
}
if (class_exists(Mailer::class)) {
- $loader->load('mailer.xml');
+ $loader->load('mailer.php');
}
if (!class_exists(Translator::class)) {
diff --git a/src/Symfony/Bundle/TwigBundle/Resources/config/console.php b/src/Symfony/Bundle/TwigBundle/Resources/config/console.php
new file mode 100644
index 0000000000000..3623b9bfabbd0
--- /dev/null
+++ b/src/Symfony/Bundle/TwigBundle/Resources/config/console.php
@@ -0,0 +1,24 @@
+services()->defaults()->private()
+
+ ->set('twig.command.debug', DebugCommand::class)
+ ->args([
+ di\ref('twig'),
+ '%kernel.project_dir%',
+ '%kernel.bundles_metadata%',
+ '%twig.default_path%',
+ di\ref('debug.file_link_formatter')->nullOnInvalid(),
+ ])
+ ->tag('console.command', ['command' => 'debug:twig'])
+
+ ->set('twig.command.lint', LintCommand::class)
+ ->args([di\ref('twig')])
+ ->tag('console.command', ['command' => 'lint:twig'])
+ ;
+};
diff --git a/src/Symfony/Bundle/TwigBundle/Resources/config/console.xml b/src/Symfony/Bundle/TwigBundle/Resources/config/console.xml
deleted file mode 100644
index 68afbcc30f2c6..0000000000000
--- a/src/Symfony/Bundle/TwigBundle/Resources/config/console.xml
+++ /dev/null
@@ -1,24 +0,0 @@
-
-
-
-
-
-
-
-
-
- %kernel.project_dir%
- %kernel.bundles_metadata%
- %twig.default_path%
-
-
-
-
-
-
-
-
-
-
diff --git a/src/Symfony/Bundle/TwigBundle/Resources/config/form.php b/src/Symfony/Bundle/TwigBundle/Resources/config/form.php
new file mode 100644
index 0000000000000..29f168c97c709
--- /dev/null
+++ b/src/Symfony/Bundle/TwigBundle/Resources/config/form.php
@@ -0,0 +1,21 @@
+services()->defaults()->private()
+
+ ->set('twig.extension.form', FormExtension::class)
+ ->args([[di\ref('service_container'), 'twig.form.renderer']])
+
+ ->set('twig.form.engine', TwigRendererEngine::class)
+ ->args(['%twig.form.resources%', di\ref('twig')])
+
+ ->set('twig.form.renderer', FormRenderer::class)
+ ->args([di\ref('twig.form.engine', di\ref('security.csrf.token_manager')->nullOnInvalid())])
+ ->tag('twig.runtime')
+ ;
+};
diff --git a/src/Symfony/Bundle/TwigBundle/Resources/config/form.xml b/src/Symfony/Bundle/TwigBundle/Resources/config/form.xml
deleted file mode 100644
index 4177da62de513..0000000000000
--- a/src/Symfony/Bundle/TwigBundle/Resources/config/form.xml
+++ /dev/null
@@ -1,27 +0,0 @@
-
-
-
-
-
-
-
-
-
- twig.form.renderer
-
-
-
-
- %twig.form.resources%
-
-
-
-
-
-
-
-
-
-
diff --git a/src/Symfony/Bundle/TwigBundle/Resources/config/mailer.php b/src/Symfony/Bundle/TwigBundle/Resources/config/mailer.php
new file mode 100644
index 0000000000000..48b4d140d9ff5
--- /dev/null
+++ b/src/Symfony/Bundle/TwigBundle/Resources/config/mailer.php
@@ -0,0 +1,17 @@
+services()->defaults()->private()
+
+ ->set('twig.mailer.message_listener', MessageListener::class)
+ ->args([null, di\ref('twig.mime_body_renderer')])
+ ->tag('kernel.event_subscriber')
+
+ ->set('twig.mime_body_renderer', BodyRenderer::class)
+ ->args([di\ref('twig')])
+ ;
+};
diff --git a/src/Symfony/Bundle/TwigBundle/Resources/config/mailer.xml b/src/Symfony/Bundle/TwigBundle/Resources/config/mailer.xml
deleted file mode 100644
index 0e425952ffe59..0000000000000
--- a/src/Symfony/Bundle/TwigBundle/Resources/config/mailer.xml
+++ /dev/null
@@ -1,18 +0,0 @@
-
-
-
-
-
-
- null
-
-
-
-
-
-
-
-
-
diff --git a/src/Symfony/Bundle/TwigBundle/Resources/config/twig.php b/src/Symfony/Bundle/TwigBundle/Resources/config/twig.php
new file mode 100644
index 0000000000000..83362ccde3d38
--- /dev/null
+++ b/src/Symfony/Bundle/TwigBundle/Resources/config/twig.php
@@ -0,0 +1,146 @@
+services()->defaults()->private()
+
+ ->set('twig', Environment::class)
+ ->public()
+ ->args([di\ref('twig.loader'), null /* Twig options */])
+ ->call('addGlobal', ['app', di\ref('twig.app_variable')])
+ ->call('addRuntimeLoader', [di\ref('twig.runtime_loader')])
+ ->configurator([di\ref('twig.configurator.environment'), 'configure'])
+ ->tag('container.preload', ['class' => 'Twig\Cache\FilesystemCache'])
+ ->tag('container.preload', ['class' => 'Twig\Extension\CoreExtension'])
+ ->tag('container.preload', ['class' => 'Twig\Extension\EscaperExtension'])
+ ->tag('container.preload', ['class' => 'Twig\Extension\OptimizerExtension'])
+ ->tag('container.preload', ['class' => 'Twig\Extension\StagingExtension'])
+ ->tag('container.preload', ['class' => 'Twig\ExtensionSet'])
+ ->tag('container.preload', ['class' => 'Twig\Template'])
+ ->tag('container.preload', ['class' => 'Twig\TemplateWrapper'])
+
+ ->alias('\Twig_Environment', 'twig')
+ ->alias(Environment::class, 'twig')
+
+ ->set('twig.app_variable', AppVariable::class)
+ ->call('setEnvironment', ['%kernel.environment%'])
+ ->call('setDebug', ['%kernel.debug%'])
+ ->call('setTokenStorage', [di\ref('security.token_storage')->ignoreOnInvalid()])
+ ->call('setRequestStack', [di\ref('request_stack')->ignoreOnInvalid()])
+
+ ->set('twig.template_iterator', TemplateIterator::class)
+ ->args([di\ref('kernel'), [] /* Twig paths */, '%twig.default_path%'])
+
+ ->set('twig.template_cache_warmer', TemplateCacheWarmer::class)
+ ->args([di\ref('Psr\Container\ContainerInterface'), di\ref('twig.template_iterator')])
+ ->tag('kernel.cache_warmer')
+ ->tag('container.service_subscriber', ['id' => 'twig'])
+
+ ->set('twig.loader.native_filesystem', FilesystemLoader::class)
+ ->args([[] /* paths */, '%kernel.project_dir%'])
+ ->tag('twig.loader')
+
+ ->set('twig.loader.chain', ChainLoader::class)
+
+ ->set('twig.extension.profiler', ProfilerExtension::class)
+ ->args([di\ref('twig.profile'), di\ref('debug.stopwatch')->ignoreOnInvalid()])
+
+ ->set('twig.profile', Profile::class)
+
+ ->set('data_collector.twig', TwigDataCollector::class)
+ ->args([di\ref('twig.profile'), di\ref('twig')])
+ ->tag('data_collector', ['template' => '@WebProfiler/Collector/twig.html.twig', 'id' => 'twig', 'priority' => 257])
+
+ ->set('twig.extension.trans', TranslationExtension::class)
+ ->args([di\ref('translation')->nullOnInvalid()])
+ ->tag('twig.extension')
+
+ ->set('twig.extension.assets', AssetExtension::class)
+ ->args([di\ref('assets.package')])
+
+ ->set('twig.extension.code', CodeExtension::class)
+ ->args([di\ref('debug.file_link_formatter')->ignoreOnInvalid(), '%kernel.project_dir%', '%kernel.charset%'])
+ ->tag('twig.extension')
+
+ ->set('twig.extension.routing', RoutingExtension::class)
+ ->args([di\ref('router')])
+
+ ->set('twig.extension.yaml', YamlExtension::class)
+
+ ->set('twig.extension.debug.stopwatch', StopwatchExtension::class)
+ ->args([di\ref('debug.stopwatch')->ignoreOnInvalid(), '%kernel.debug%'])
+
+ ->set('twig.extension.expression', ExpressionExtension::class)
+
+ ->set('twig.extension.httpkernel', HttpKernelExtension::class)
+
+ ->set('twig.runtime.httpkernel', HttpKernelRuntime::class)
+ ->args([di\ref('fragment.handler')])
+
+ ->set('twig.extension.httpfoundation', HttpFoundationExtension::class)
+ ->args([di\ref('url_helper')])
+
+ ->set('twig.extension.debug', DebugExtension::class)
+
+ ->set('twig.extension.weblink', WebLinkExtension::class)
+ ->args([di\ref('request_stack')])
+
+ ->set('twig.translation.extractor', TwigExtractor::class)
+ ->args([di\ref('twig')])
+ ->tag('translation.extractor', ['alias' => 'twig'])
+
+ ->set('workflow.twig_extension', WorkflowExtension::class)
+ ->args([di\ref('workflow.registry')])
+
+ ->set('twig.configurator.environment', EnvironmentConfigurator::class)
+ ->args([
+ '', /* date format, set in TwigExtension */
+ '', /* interval format, set in TwigExtension */
+ '', /* timezone, set in TwigExtension */
+ '', /* decimals, set in TwigExtension */
+ '', /* decimal point, set in TwigExtension */
+ '', /* thousands separator, set in TwigExtension */
+ ])
+
+ ->set('twig.runtime_loader', ContainerRuntimeLoader::class)
+ ->args(['' /* runtime locator */])
+
+ ->set('twig.error_renderer.html', TwigErrorRenderer::class)
+ ->decorate('error_renderer.html')
+ ->args([
+ di\ref('twig'),
+ di\ref('twig.error_renderer.html.inner'),
+ di\service(TwigErrorRenderer::class)
+ ->factory([TwigErrorRenderer::class, 'isDebug'])
+ ->args([di\ref('request_stack'), '%kernel.debug%']),
+ ])
+
+ ;
+};
diff --git a/src/Symfony/Bundle/TwigBundle/Resources/config/twig.xml b/src/Symfony/Bundle/TwigBundle/Resources/config/twig.xml
deleted file mode 100644
index cb30219365e4e..0000000000000
--- a/src/Symfony/Bundle/TwigBundle/Resources/config/twig.xml
+++ /dev/null
@@ -1,153 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
- app
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- %kernel.environment%
- %kernel.debug%
-
-
-
-
-
-
-
- %twig.default_path%
-
-
-
-
-
-
-
-
-
-
-
- %kernel.project_dir%
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- %kernel.project_dir%
- %kernel.charset%
-
-
-
-
-
-
-
-
-
-
- %kernel.debug%
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- %kernel.debug%
-
-
-
-
-