|
| 1 | +<?php |
| 2 | + |
| 3 | +/* |
| 4 | + * This file is part of the Symfony package. |
| 5 | + * |
| 6 | + * (c) Fabien Potencier <fabien@symfony.com> |
| 7 | + * |
| 8 | + * For the full copyright and license information, please view the LICENSE |
| 9 | + * file that was distributed with this source code. |
| 10 | + */ |
| 11 | + |
| 12 | +namespace Symfony\Component\DependencyInjection\Loader\Configurator; |
| 13 | + |
| 14 | +use Psr\Container\ContainerInterface; |
| 15 | +use Symfony\Bridge\Twig\AppVariable; |
| 16 | +use Symfony\Bridge\Twig\DataCollector\TwigDataCollector; |
| 17 | +use Symfony\Bridge\Twig\ErrorRenderer\TwigErrorRenderer; |
| 18 | +use Symfony\Bridge\Twig\Extension\AssetExtension; |
| 19 | +use Symfony\Bridge\Twig\Extension\CodeExtension; |
| 20 | +use Symfony\Bridge\Twig\Extension\ExpressionExtension; |
| 21 | +use Symfony\Bridge\Twig\Extension\HttpFoundationExtension; |
| 22 | +use Symfony\Bridge\Twig\Extension\HttpKernelExtension; |
| 23 | +use Symfony\Bridge\Twig\Extension\HttpKernelRuntime; |
| 24 | +use Symfony\Bridge\Twig\Extension\ProfilerExtension; |
| 25 | +use Symfony\Bridge\Twig\Extension\RoutingExtension; |
| 26 | +use Symfony\Bridge\Twig\Extension\StopwatchExtension; |
| 27 | +use Symfony\Bridge\Twig\Extension\TranslationExtension; |
| 28 | +use Symfony\Bridge\Twig\Extension\WebLinkExtension; |
| 29 | +use Symfony\Bridge\Twig\Extension\WorkflowExtension; |
| 30 | +use Symfony\Bridge\Twig\Extension\YamlExtension; |
| 31 | +use Symfony\Bridge\Twig\Translation\TwigExtractor; |
| 32 | +use Symfony\Bundle\TwigBundle\CacheWarmer\TemplateCacheWarmer; |
| 33 | +use Symfony\Bundle\TwigBundle\DependencyInjection\Configurator\EnvironmentConfigurator; |
| 34 | +use Symfony\Bundle\TwigBundle\TemplateIterator; |
| 35 | +use Twig\Cache\FilesystemCache; |
| 36 | +use Twig\Environment; |
| 37 | +use Twig\Extension\CoreExtension; |
| 38 | +use Twig\Extension\DebugExtension; |
| 39 | +use Twig\Extension\EscaperExtension; |
| 40 | +use Twig\Extension\OptimizerExtension; |
| 41 | +use Twig\Extension\StagingExtension; |
| 42 | +use Twig\ExtensionSet; |
| 43 | +use Twig\Loader\ChainLoader; |
| 44 | +use Twig\Loader\FilesystemLoader; |
| 45 | +use Twig\Profiler\Profile; |
| 46 | +use Twig\RuntimeLoader\ContainerRuntimeLoader; |
| 47 | +use Twig\Template; |
| 48 | +use Twig\TemplateWrapper; |
| 49 | + |
| 50 | +return static function (ContainerConfigurator $container) { |
| 51 | + $container->services() |
| 52 | + ->set('twig', Environment::class) |
| 53 | + ->public() |
| 54 | + ->args([service('twig.loader'), abstract_arg('Twig options')]) |
| 55 | + ->call('addGlobal', ['app', service('twig.app_variable')]) |
| 56 | + ->call('addRuntimeLoader', [service('twig.runtime_loader')]) |
| 57 | + ->configurator([service('twig.configurator.environment'), 'configure']) |
| 58 | + ->tag('container.preload', ['class' => FilesystemCache::class]) |
| 59 | + ->tag('container.preload', ['class' => CoreExtension::class]) |
| 60 | + ->tag('container.preload', ['class' => EscaperExtension::class]) |
| 61 | + ->tag('container.preload', ['class' => OptimizerExtension::class]) |
| 62 | + ->tag('container.preload', ['class' => StagingExtension::class]) |
| 63 | + ->tag('container.preload', ['class' => ExtensionSet::class]) |
| 64 | + ->tag('container.preload', ['class' => Template::class]) |
| 65 | + ->tag('container.preload', ['class' => TemplateWrapper::class]) |
| 66 | + |
| 67 | + ->alias('Twig_Environment', 'twig') |
| 68 | + ->alias(Environment::class, 'twig') |
| 69 | + |
| 70 | + ->set('twig.app_variable', AppVariable::class) |
| 71 | + ->call('setEnvironment', [param('kernel.environment')]) |
| 72 | + ->call('setDebug', [param('kernel.debug')]) |
| 73 | + ->call('setTokenStorage', [service('security.token_storage')->ignoreOnInvalid()]) |
| 74 | + ->call('setRequestStack', [service('request_stack')->ignoreOnInvalid()]) |
| 75 | + |
| 76 | + ->set('twig.template_iterator', TemplateIterator::class) |
| 77 | + ->args([service('kernel'), abstract_arg('Twig paths'), param('twig.default_path')]) |
| 78 | + |
| 79 | + ->set('twig.template_cache_warmer', TemplateCacheWarmer::class) |
| 80 | + ->args([service(ContainerInterface::class), service('twig.template_iterator')]) |
| 81 | + ->tag('kernel.cache_warmer') |
| 82 | + ->tag('container.service_subscriber', ['id' => 'twig']) |
| 83 | + |
| 84 | + ->set('twig.loader.native_filesystem', FilesystemLoader::class) |
| 85 | + ->args([[], param('kernel.project_dir')]) |
| 86 | + ->tag('twig.loader') |
| 87 | + |
| 88 | + ->set('twig.loader.chain', ChainLoader::class) |
| 89 | + |
| 90 | + ->set('twig.extension.profiler', ProfilerExtension::class) |
| 91 | + ->args([service('twig.profile'), service('debug.stopwatch')->ignoreOnInvalid()]) |
| 92 | + |
| 93 | + ->set('twig.profile', Profile::class) |
| 94 | + |
| 95 | + ->set('data_collector.twig', TwigDataCollector::class) |
| 96 | + ->args([service('twig.profile'), service('twig')]) |
| 97 | + ->tag('data_collector', ['template' => '@WebProfiler/Collector/twig.html.twig', 'id' => 'twig', 'priority' => 257]) |
| 98 | + |
| 99 | + ->set('twig.extension.trans', TranslationExtension::class) |
| 100 | + ->args([service('translation')->nullOnInvalid()]) |
| 101 | + ->tag('twig.extension') |
| 102 | + |
| 103 | + ->set('twig.extension.assets', AssetExtension::class) |
| 104 | + ->args([service('assets.packages')]) |
| 105 | + |
| 106 | + ->set('twig.extension.code', CodeExtension::class) |
| 107 | + ->args([service('debug.file_link_formatter')->ignoreOnInvalid(), param('kernel.project_dir'), param('kernel.charset')]) |
| 108 | + ->tag('twig.extension') |
| 109 | + |
| 110 | + ->set('twig.extension.routing', RoutingExtension::class) |
| 111 | + ->args([service('router')]) |
| 112 | + |
| 113 | + ->set('twig.extension.yaml', YamlExtension::class) |
| 114 | + |
| 115 | + ->set('twig.extension.debug.stopwatch', StopwatchExtension::class) |
| 116 | + ->args([service('debug.stopwatch')->ignoreOnInvalid(), param('kernel.debug')]) |
| 117 | + |
| 118 | + ->set('twig.extension.expression', ExpressionExtension::class) |
| 119 | + |
| 120 | + ->set('twig.extension.httpkernel', HttpKernelExtension::class) |
| 121 | + |
| 122 | + ->set('twig.runtime.httpkernel', HttpKernelRuntime::class) |
| 123 | + ->args([service('fragment.handler')]) |
| 124 | + |
| 125 | + ->set('twig.extension.httpfoundation', HttpFoundationExtension::class) |
| 126 | + ->args([service('url_helper')]) |
| 127 | + |
| 128 | + ->set('twig.extension.debug', DebugExtension::class) |
| 129 | + |
| 130 | + ->set('twig.extension.weblink', WebLinkExtension::class) |
| 131 | + ->args([service('request_stack')]) |
| 132 | + |
| 133 | + ->set('twig.translation.extractor', TwigExtractor::class) |
| 134 | + ->args([service('twig')]) |
| 135 | + ->tag('translation.extractor', ['alias' => 'twig']) |
| 136 | + |
| 137 | + ->set('workflow.twig_extension', WorkflowExtension::class) |
| 138 | + ->args([service('workflow.registry')]) |
| 139 | + |
| 140 | + ->set('twig.configurator.environment', EnvironmentConfigurator::class) |
| 141 | + ->args([ |
| 142 | + abstract_arg('date format, set in TwigExtension'), |
| 143 | + abstract_arg('interval format, set in TwigExtension'), |
| 144 | + abstract_arg('timezone, set in TwigExtension'), |
| 145 | + abstract_arg('decimals, set in TwigExtension'), |
| 146 | + abstract_arg('decimal point, set in TwigExtension'), |
| 147 | + abstract_arg('thousands separator, set in TwigExtension'), |
| 148 | + ]) |
| 149 | + |
| 150 | + ->set('twig.runtime_loader', ContainerRuntimeLoader::class) |
| 151 | + ->args([abstract_arg('runtime locator')]) |
| 152 | + |
| 153 | + ->set('twig.error_renderer.html', TwigErrorRenderer::class) |
| 154 | + ->decorate('error_renderer.html') |
| 155 | + ->args([ |
| 156 | + service('twig'), |
| 157 | + service('twig.error_renderer.html.inner'), |
| 158 | + inline_service(TwigErrorRenderer::class) |
| 159 | + ->factory([TwigErrorRenderer::class, 'isDebug']) |
| 160 | + ->args([service('request_stack'), param('kernel.debug')]), |
| 161 | + ]) |
| 162 | + ; |
| 163 | +}; |
0 commit comments