initial commit

This commit is contained in:
boris
2025-09-30 09:24:25 +01:00
committed by boris
parent a783a12c97
commit c7770ea03b
4695 changed files with 525784 additions and 0 deletions

View File

@@ -0,0 +1,280 @@
<?php
/*
* This file is part of the Symfony package.
*
* (c) Fabien Potencier <fabien@symfony.com>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace Symfony\Component\DependencyInjection\Loader\Configurator;
use Symfony\Component\AssetMapper\AssetMapper;
use Symfony\Component\AssetMapper\AssetMapperCompiler;
use Symfony\Component\AssetMapper\AssetMapperDevServerSubscriber;
use Symfony\Component\AssetMapper\AssetMapperInterface;
use Symfony\Component\AssetMapper\AssetMapperRepository;
use Symfony\Component\AssetMapper\Command\AssetMapperCompileCommand;
use Symfony\Component\AssetMapper\Command\CompressAssetsCommand;
use Symfony\Component\AssetMapper\Command\DebugAssetMapperCommand;
use Symfony\Component\AssetMapper\Command\ImportMapAuditCommand;
use Symfony\Component\AssetMapper\Command\ImportMapInstallCommand;
use Symfony\Component\AssetMapper\Command\ImportMapOutdatedCommand;
use Symfony\Component\AssetMapper\Command\ImportMapRemoveCommand;
use Symfony\Component\AssetMapper\Command\ImportMapRequireCommand;
use Symfony\Component\AssetMapper\Command\ImportMapUpdateCommand;
use Symfony\Component\AssetMapper\CompiledAssetMapperConfigReader;
use Symfony\Component\AssetMapper\Compiler\CssAssetUrlCompiler;
use Symfony\Component\AssetMapper\Compiler\JavaScriptImportPathCompiler;
use Symfony\Component\AssetMapper\Compiler\SourceMappingUrlsCompiler;
use Symfony\Component\AssetMapper\Compressor\BrotliCompressor;
use Symfony\Component\AssetMapper\Compressor\ChainCompressor;
use Symfony\Component\AssetMapper\Compressor\CompressorInterface;
use Symfony\Component\AssetMapper\Compressor\GzipCompressor;
use Symfony\Component\AssetMapper\Compressor\ZstandardCompressor;
use Symfony\Component\AssetMapper\Factory\CachedMappedAssetFactory;
use Symfony\Component\AssetMapper\Factory\MappedAssetFactory;
use Symfony\Component\AssetMapper\ImportMap\ImportMapAuditor;
use Symfony\Component\AssetMapper\ImportMap\ImportMapConfigReader;
use Symfony\Component\AssetMapper\ImportMap\ImportMapGenerator;
use Symfony\Component\AssetMapper\ImportMap\ImportMapManager;
use Symfony\Component\AssetMapper\ImportMap\ImportMapRenderer;
use Symfony\Component\AssetMapper\ImportMap\ImportMapUpdateChecker;
use Symfony\Component\AssetMapper\ImportMap\ImportMapVersionChecker;
use Symfony\Component\AssetMapper\ImportMap\RemotePackageDownloader;
use Symfony\Component\AssetMapper\ImportMap\RemotePackageStorage;
use Symfony\Component\AssetMapper\ImportMap\Resolver\JsDelivrEsmResolver;
use Symfony\Component\AssetMapper\MapperAwareAssetPackage;
use Symfony\Component\AssetMapper\Path\LocalPublicAssetsFilesystem;
use Symfony\Component\AssetMapper\Path\PublicAssetsPathResolver;
return static function (ContainerConfigurator $container) {
$container->services()
->set('asset_mapper', AssetMapper::class)
->args([
service('asset_mapper.repository'),
service('asset_mapper.mapped_asset_factory'),
service('asset_mapper.compiled_asset_mapper_config_reader'),
])
->alias(AssetMapperInterface::class, 'asset_mapper')
->alias('asset_mapper.http_client', 'http_client')
->set('asset_mapper.mapped_asset_factory', MappedAssetFactory::class)
->args([
service('asset_mapper.public_assets_path_resolver'),
service('asset_mapper_compiler'),
abstract_arg('vendor directory'),
])
->set('asset_mapper.cached_mapped_asset_factory', CachedMappedAssetFactory::class)
->args([
service('.inner'),
param('kernel.cache_dir').'/asset_mapper',
param('kernel.debug'),
])
->decorate('asset_mapper.mapped_asset_factory')
->set('asset_mapper.repository', AssetMapperRepository::class)
->args([
abstract_arg('array of asset mapper paths'),
param('kernel.project_dir'),
abstract_arg('array of excluded path patterns'),
abstract_arg('exclude dot files'),
param('kernel.debug'),
])
->set('asset_mapper.public_assets_path_resolver', PublicAssetsPathResolver::class)
->args([
abstract_arg('asset public prefix'),
])
->set('asset_mapper.local_public_assets_filesystem', LocalPublicAssetsFilesystem::class)
->args([
abstract_arg('public directory'),
])
->set('asset_mapper.compiled_asset_mapper_config_reader', CompiledAssetMapperConfigReader::class)
->args([
abstract_arg('public assets directory'),
])
->set('asset_mapper.asset_package', MapperAwareAssetPackage::class)
->decorate('assets._default_package')
->args([
service('.inner'),
service('asset_mapper'),
])
->set('asset_mapper.dev_server_subscriber', AssetMapperDevServerSubscriber::class)
->args([
service('asset_mapper'),
abstract_arg('asset public prefix'),
abstract_arg('extensions map'),
service('cache.asset_mapper'),
service('profiler')->nullOnInvalid(),
])
->tag('kernel.event_subscriber')
->set('asset_mapper.command.compile', AssetMapperCompileCommand::class)
->args([
service('asset_mapper.compiled_asset_mapper_config_reader'),
service('asset_mapper'),
service('asset_mapper.importmap.generator'),
service('asset_mapper.local_public_assets_filesystem'),
param('kernel.project_dir'),
param('kernel.debug'),
service('event_dispatcher')->nullOnInvalid(),
])
->tag('console.command')
->set('asset_mapper.command.debug', DebugAssetMapperCommand::class)
->args([
service('asset_mapper'),
service('asset_mapper.repository'),
param('kernel.project_dir'),
])
->tag('console.command')
->set('asset_mapper_compiler', AssetMapperCompiler::class)
->args([
tagged_iterator('asset_mapper.compiler'),
service_closure('asset_mapper'),
])
->set('asset_mapper.compiler.css_asset_url_compiler', CssAssetUrlCompiler::class)
->args([
abstract_arg('missing import mode'),
service('logger'),
])
->tag('asset_mapper.compiler')
->tag('monolog.logger', ['channel' => 'asset_mapper'])
->set('asset_mapper.compiler.source_mapping_urls_compiler', SourceMappingUrlsCompiler::class)
->tag('asset_mapper.compiler')
->set('asset_mapper.compiler.javascript_import_path_compiler', JavaScriptImportPathCompiler::class)
->args([
service('asset_mapper.importmap.config_reader'),
abstract_arg('missing import mode'),
service('logger'),
])
->tag('asset_mapper.compiler')
->tag('monolog.logger', ['channel' => 'asset_mapper'])
->set('asset_mapper.importmap.config_reader', ImportMapConfigReader::class)
->args([
abstract_arg('importmap.php path'),
service('asset_mapper.importmap.remote_package_storage'),
])
->set('asset_mapper.importmap.manager', ImportMapManager::class)
->args([
service('asset_mapper'),
service('asset_mapper.importmap.config_reader'),
service('asset_mapper.importmap.remote_package_downloader'),
service('asset_mapper.importmap.resolver'),
])
->alias(ImportMapManager::class, 'asset_mapper.importmap.manager')
->set('asset_mapper.importmap.generator', ImportMapGenerator::class)
->args([
service('asset_mapper'),
service('asset_mapper.compiled_asset_mapper_config_reader'),
service('asset_mapper.importmap.config_reader'),
])
->set('asset_mapper.importmap.remote_package_storage', RemotePackageStorage::class)
->args([
abstract_arg('vendor directory'),
])
->set('asset_mapper.importmap.remote_package_downloader', RemotePackageDownloader::class)
->args([
service('asset_mapper.importmap.remote_package_storage'),
service('asset_mapper.importmap.config_reader'),
service('asset_mapper.importmap.resolver'),
])
->set('asset_mapper.importmap.version_checker', ImportMapVersionChecker::class)
->args([
service('asset_mapper.importmap.config_reader'),
service('asset_mapper.importmap.remote_package_downloader'),
])
->set('asset_mapper.importmap.resolver', JsDelivrEsmResolver::class)
->args([service('asset_mapper.http_client')])
->set('asset_mapper.importmap.renderer', ImportMapRenderer::class)
->args([
service('asset_mapper.importmap.generator'),
service('assets.packages')->nullOnInvalid(),
param('kernel.charset'),
abstract_arg('polyfill URL'),
abstract_arg('script HTML attributes'),
service('request_stack'),
])
->set('asset_mapper.importmap.auditor', ImportMapAuditor::class)
->args([
service('asset_mapper.importmap.config_reader'),
service('asset_mapper.http_client'),
])
->set('asset_mapper.importmap.update_checker', ImportMapUpdateChecker::class)
->args([
service('asset_mapper.importmap.config_reader'),
service('asset_mapper.http_client'),
])
->set('asset_mapper.importmap.command.require', ImportMapRequireCommand::class)
->args([
service('asset_mapper.importmap.manager'),
service('asset_mapper.importmap.version_checker'),
param('kernel.project_dir'),
])
->tag('console.command')
->set('asset_mapper.importmap.command.remove', ImportMapRemoveCommand::class)
->args([service('asset_mapper.importmap.manager')])
->tag('console.command')
->set('asset_mapper.importmap.command.update', ImportMapUpdateCommand::class)
->args([
service('asset_mapper.importmap.manager'),
service('asset_mapper.importmap.version_checker'),
])
->tag('console.command')
->set('asset_mapper.importmap.command.install', ImportMapInstallCommand::class)
->args([
service('asset_mapper.importmap.remote_package_downloader'),
param('kernel.project_dir'),
])
->tag('console.command')
->set('asset_mapper.importmap.command.audit', ImportMapAuditCommand::class)
->args([service('asset_mapper.importmap.auditor')])
->tag('console.command')
->set('asset_mapper.importmap.command.outdated', ImportMapOutdatedCommand::class)
->args([service('asset_mapper.importmap.update_checker')])
->tag('console.command')
->set('asset_mapper.compressor.brotli', BrotliCompressor::class)
->set('asset_mapper.compressor.zstandard', ZstandardCompressor::class)
->set('asset_mapper.compressor.gzip', GzipCompressor::class)
->set('asset_mapper.compressor', ChainCompressor::class)
->args([
abstract_arg('compressor'),
service('logger'),
])
->alias(CompressorInterface::class, 'asset_mapper.compressor')
->set('asset_mapper.assets.command.compress', CompressAssetsCommand::class)
->args([service('asset_mapper.compressor')])
->tag('console.command')
;
};

View File

@@ -0,0 +1,85 @@
<?php
/*
* This file is part of the Symfony package.
*
* (c) Fabien Potencier <fabien@symfony.com>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace Symfony\Component\DependencyInjection\Loader\Configurator;
use Symfony\Component\Asset\Context\RequestStackContext;
use Symfony\Component\Asset\Package;
use Symfony\Component\Asset\Packages;
use Symfony\Component\Asset\PathPackage;
use Symfony\Component\Asset\UrlPackage;
use Symfony\Component\Asset\VersionStrategy\EmptyVersionStrategy;
use Symfony\Component\Asset\VersionStrategy\JsonManifestVersionStrategy;
use Symfony\Component\Asset\VersionStrategy\StaticVersionStrategy;
return static function (ContainerConfigurator $container) {
$container->parameters()
->set('asset.request_context.base_path', null)
->set('asset.request_context.secure', null)
;
$container->services()
->set('assets.packages', Packages::class)
->args([
service('assets._default_package'),
tagged_iterator('assets.package', 'package'),
])
->alias(Packages::class, 'assets.packages')
->set('assets.empty_package', Package::class)
->args([
service('assets.empty_version_strategy'),
])
->alias('assets._default_package', 'assets.empty_package')
->set('assets.context', RequestStackContext::class)
->args([
service('request_stack'),
param('asset.request_context.base_path'),
param('asset.request_context.secure'),
])
->set('assets.path_package', PathPackage::class)
->abstract()
->args([
abstract_arg('base path'),
abstract_arg('version strategy'),
service('assets.context'),
])
->set('assets.url_package', UrlPackage::class)
->abstract()
->args([
abstract_arg('base URLs'),
abstract_arg('version strategy'),
service('assets.context'),
])
->set('assets.static_version_strategy', StaticVersionStrategy::class)
->abstract()
->args([
abstract_arg('version'),
abstract_arg('format'),
])
->set('assets.empty_version_strategy', EmptyVersionStrategy::class)
->set('assets.json_manifest_version_strategy', JsonManifestVersionStrategy::class)
->abstract()
->args([
abstract_arg('manifest path'),
service('http_client')->nullOnInvalid(),
false,
])
;
};

View File

@@ -0,0 +1,258 @@
<?php
/*
* This file is part of the Symfony package.
*
* (c) Fabien Potencier <fabien@symfony.com>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace Symfony\Component\DependencyInjection\Loader\Configurator;
use Psr\Cache\CacheItemPoolInterface;
use Symfony\Component\Cache\Adapter\AbstractAdapter;
use Symfony\Component\Cache\Adapter\AdapterInterface;
use Symfony\Component\Cache\Adapter\ApcuAdapter;
use Symfony\Component\Cache\Adapter\ArrayAdapter;
use Symfony\Component\Cache\Adapter\DoctrineDbalAdapter;
use Symfony\Component\Cache\Adapter\FilesystemAdapter;
use Symfony\Component\Cache\Adapter\MemcachedAdapter;
use Symfony\Component\Cache\Adapter\PdoAdapter;
use Symfony\Component\Cache\Adapter\ProxyAdapter;
use Symfony\Component\Cache\Adapter\RedisAdapter;
use Symfony\Component\Cache\Adapter\RedisTagAwareAdapter;
use Symfony\Component\Cache\Adapter\TagAwareAdapter;
use Symfony\Component\Cache\Marshaller\DefaultMarshaller;
use Symfony\Component\Cache\Messenger\EarlyExpirationHandler;
use Symfony\Component\HttpKernel\CacheClearer\Psr6CacheClearer;
use Symfony\Contracts\Cache\CacheInterface;
use Symfony\Contracts\Cache\NamespacedPoolInterface;
use Symfony\Contracts\Cache\TagAwareCacheInterface;
return static function (ContainerConfigurator $container) {
$container->services()
->set('cache.app')
->parent('cache.adapter.filesystem')
->public()
->tag('cache.pool', ['clearer' => 'cache.app_clearer'])
->set('cache.app.taggable', TagAwareAdapter::class)
->args([service('cache.app')])
->tag('cache.taggable', ['pool' => 'cache.app'])
->set('cache.system')
->parent('cache.adapter.system')
->public()
->tag('cache.pool')
->set('cache.validator')
->parent('cache.system')
->private()
->tag('cache.pool')
->set('cache.serializer')
->parent('cache.system')
->private()
->tag('cache.pool')
->set('cache.property_info')
->parent('cache.system')
->private()
->tag('cache.pool')
->set('cache.asset_mapper')
->parent('cache.system')
->private()
->tag('cache.pool')
->set('cache.messenger.restart_workers_signal')
->parent('cache.app')
->private()
->tag('cache.pool')
->set('cache.scheduler')
->parent('cache.app')
->private()
->tag('cache.pool')
->set('cache.adapter.system', AdapterInterface::class)
->abstract()
->factory([AbstractAdapter::class, 'createSystemCache'])
->args([
'', // namespace
0, // default lifetime
abstract_arg('version'),
\sprintf('%s/pools/system', param('kernel.cache_dir')),
service('logger')->ignoreOnInvalid(),
])
->tag('cache.pool', ['clearer' => 'cache.system_clearer', 'reset' => 'reset'])
->tag('monolog.logger', ['channel' => 'cache'])
->set('cache.adapter.apcu', ApcuAdapter::class)
->abstract()
->args([
'', // namespace
0, // default lifetime
abstract_arg('version'),
])
->call('setLogger', [service('logger')->ignoreOnInvalid()])
->tag('cache.pool', ['clearer' => 'cache.default_clearer', 'reset' => 'reset'])
->tag('monolog.logger', ['channel' => 'cache'])
->set('cache.adapter.filesystem', FilesystemAdapter::class)
->abstract()
->args([
'', // namespace
0, // default lifetime
\sprintf('%s/pools/app', param('kernel.cache_dir')),
service('cache.default_marshaller')->ignoreOnInvalid(),
])
->call('setLogger', [service('logger')->ignoreOnInvalid()])
->tag('cache.pool', ['clearer' => 'cache.default_clearer', 'reset' => 'reset'])
->tag('monolog.logger', ['channel' => 'cache'])
->set('cache.adapter.psr6', ProxyAdapter::class)
->abstract()
->args([
abstract_arg('PSR-6 provider service'),
'', // namespace
0, // default lifetime
])
->tag('cache.pool', [
'provider' => 'cache.default_psr6_provider',
'clearer' => 'cache.default_clearer',
'reset' => 'reset',
])
->set('cache.adapter.redis', RedisAdapter::class)
->abstract()
->args([
abstract_arg('Redis connection service'),
'', // namespace
0, // default lifetime
service('cache.default_marshaller')->ignoreOnInvalid(),
])
->call('setLogger', [service('logger')->ignoreOnInvalid()])
->tag('cache.pool', [
'provider' => 'cache.default_redis_provider',
'clearer' => 'cache.default_clearer',
'reset' => 'reset',
])
->tag('monolog.logger', ['channel' => 'cache'])
->alias('cache.adapter.valkey', 'cache.adapter.redis')
->set('cache.adapter.redis_tag_aware', RedisTagAwareAdapter::class)
->abstract()
->args([
abstract_arg('Redis connection service'),
'', // namespace
0, // default lifetime
service('cache.default_marshaller')->ignoreOnInvalid(),
])
->call('setLogger', [service('logger')->ignoreOnInvalid()])
->tag('cache.pool', [
'provider' => 'cache.default_redis_provider',
'clearer' => 'cache.default_clearer',
'reset' => 'reset',
])
->tag('monolog.logger', ['channel' => 'cache'])
->alias('cache.adapter.valkey_tag_aware', 'cache.adapter.redis_tag_aware')
->set('cache.adapter.memcached', MemcachedAdapter::class)
->abstract()
->args([
abstract_arg('Memcached connection service'),
'', // namespace
0, // default lifetime
service('cache.default_marshaller')->ignoreOnInvalid(),
])
->call('setLogger', [service('logger')->ignoreOnInvalid()])
->tag('cache.pool', [
'provider' => 'cache.default_memcached_provider',
'clearer' => 'cache.default_clearer',
'reset' => 'reset',
])
->tag('monolog.logger', ['channel' => 'cache'])
->set('cache.adapter.doctrine_dbal', DoctrineDbalAdapter::class)
->abstract()
->args([
abstract_arg('DBAL connection service'),
'', // namespace
0, // default lifetime
[], // table options
service('cache.default_marshaller')->ignoreOnInvalid(),
])
->call('setLogger', [service('logger')->ignoreOnInvalid()])
->tag('cache.pool', [
'provider' => 'cache.default_doctrine_dbal_provider',
'clearer' => 'cache.default_clearer',
'reset' => 'reset',
])
->tag('monolog.logger', ['channel' => 'cache'])
->set('cache.adapter.pdo', PdoAdapter::class)
->abstract()
->args([
abstract_arg('PDO connection service'),
'', // namespace
0, // default lifetime
[], // table options
service('cache.default_marshaller')->ignoreOnInvalid(),
])
->call('setLogger', [service('logger')->ignoreOnInvalid()])
->tag('cache.pool', [
'provider' => 'cache.default_pdo_provider',
'clearer' => 'cache.default_clearer',
'reset' => 'reset',
])
->tag('monolog.logger', ['channel' => 'cache'])
->set('cache.adapter.array', ArrayAdapter::class)
->abstract()
->args([
0, // default lifetime
])
->call('setLogger', [service('logger')->ignoreOnInvalid()])
->tag('cache.pool', ['clearer' => 'cache.default_clearer', 'reset' => 'reset'])
->tag('monolog.logger', ['channel' => 'cache'])
->set('cache.default_marshaller', DefaultMarshaller::class)
->args([
null, // use igbinary_serialize() when available
'%kernel.debug%',
])
->set('cache.early_expiration_handler', EarlyExpirationHandler::class)
->args([
service('reverse_container'),
])
->tag('messenger.message_handler')
->set('cache.default_clearer', Psr6CacheClearer::class)
->args([
[],
])
->set('cache.system_clearer')
->parent('cache.default_clearer')
->public()
->set('cache.global_clearer')
->parent('cache.default_clearer')
->public()
->alias('cache.app_clearer', 'cache.default_clearer')
->public()
->alias(CacheItemPoolInterface::class, 'cache.app')
->alias(CacheInterface::class, 'cache.app')
->alias(NamespacedPoolInterface::class, 'cache.app')
->alias(TagAwareCacheInterface::class, 'cache.app.taggable')
;
};

View File

@@ -0,0 +1,39 @@
<?php
/*
* This file is part of the Symfony package.
*
* (c) Fabien Potencier <fabien@symfony.com>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace Symfony\Component\DependencyInjection\Loader\Configurator;
use Symfony\Bundle\FrameworkBundle\CacheWarmer\CachePoolClearerCacheWarmer;
use Symfony\Component\Cache\DataCollector\CacheDataCollector;
return static function (ContainerConfigurator $container) {
$container->services()
// DataCollector (public to prevent inlining, made private in CacheCollectorPass)
->set('data_collector.cache', CacheDataCollector::class)
->public()
->tag('data_collector', [
'template' => '@WebProfiler/Collector/cache.html.twig',
'id' => 'cache',
'priority' => 275,
])
// CacheWarmer used in dev to clear cache pool
->set('cache_pool_clearer.cache_warmer', CachePoolClearerCacheWarmer::class)
->args([
service('cache.system_clearer'),
[
'cache.validator',
'cache.serializer',
],
])
->tag('kernel.cache_warmer', ['priority' => 64])
;
};

View File

@@ -0,0 +1,82 @@
<?php
/*
* This file is part of the Symfony package.
*
* (c) Fabien Potencier <fabien@symfony.com>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace Symfony\Component\DependencyInjection\Loader\Configurator;
use Symfony\Bundle\FrameworkBundle\DataCollector\RouterDataCollector;
use Symfony\Component\Console\DataCollector\CommandDataCollector;
use Symfony\Component\HttpKernel\DataCollector\AjaxDataCollector;
use Symfony\Component\HttpKernel\DataCollector\ConfigDataCollector;
use Symfony\Component\HttpKernel\DataCollector\EventDataCollector;
use Symfony\Component\HttpKernel\DataCollector\ExceptionDataCollector;
use Symfony\Component\HttpKernel\DataCollector\LoggerDataCollector;
use Symfony\Component\HttpKernel\DataCollector\MemoryDataCollector;
use Symfony\Component\HttpKernel\DataCollector\RequestDataCollector;
use Symfony\Component\HttpKernel\DataCollector\TimeDataCollector;
use Symfony\Component\HttpKernel\KernelEvents;
return static function (ContainerConfigurator $container) {
$container->services()
->set('data_collector.config', ConfigDataCollector::class)
->call('setKernel', [service('kernel')->ignoreOnInvalid()])
->tag('data_collector', ['template' => '@WebProfiler/Collector/config.html.twig', 'id' => 'config', 'priority' => -255])
->set('data_collector.request', RequestDataCollector::class)
->args([
service('.virtual_request_stack')->ignoreOnInvalid(),
])
->tag('kernel.event_subscriber')
->tag('data_collector', ['template' => '@WebProfiler/Collector/request.html.twig', 'id' => 'request', 'priority' => 335])
->set('data_collector.request.session_collector', \Closure::class)
->factory([\Closure::class, 'fromCallable'])
->args([[service('data_collector.request'), 'collectSessionUsage']])
->set('data_collector.ajax', AjaxDataCollector::class)
->tag('data_collector', ['template' => '@WebProfiler/Collector/ajax.html.twig', 'id' => 'ajax', 'priority' => 315])
->set('data_collector.exception', ExceptionDataCollector::class)
->tag('data_collector', ['template' => '@WebProfiler/Collector/exception.html.twig', 'id' => 'exception', 'priority' => 305])
->set('data_collector.events', EventDataCollector::class)
->args([
tagged_iterator('event_dispatcher.dispatcher', 'name'),
service('.virtual_request_stack')->ignoreOnInvalid(),
])
->tag('data_collector', ['template' => '@WebProfiler/Collector/events.html.twig', 'id' => 'events', 'priority' => 290])
->set('data_collector.logger', LoggerDataCollector::class)
->args([
service('logger')->ignoreOnInvalid(),
\sprintf('%s/%s', param('kernel.build_dir'), param('kernel.container_class')),
service('.virtual_request_stack')->ignoreOnInvalid(),
])
->tag('monolog.logger', ['channel' => 'profiler'])
->tag('data_collector', ['template' => '@WebProfiler/Collector/logger.html.twig', 'id' => 'logger', 'priority' => 300])
->set('data_collector.time', TimeDataCollector::class)
->args([
service('kernel')->ignoreOnInvalid(),
service('debug.stopwatch')->ignoreOnInvalid(),
])
->tag('data_collector', ['template' => '@WebProfiler/Collector/time.html.twig', 'id' => 'time', 'priority' => 330])
->set('data_collector.memory', MemoryDataCollector::class)
->tag('data_collector', ['template' => '@WebProfiler/Collector/memory.html.twig', 'id' => 'memory', 'priority' => 325])
->set('data_collector.router', RouterDataCollector::class)
->tag('kernel.event_listener', ['event' => KernelEvents::CONTROLLER, 'method' => 'onKernelController'])
->tag('data_collector', ['template' => '@WebProfiler/Collector/router.html.twig', 'id' => 'router', 'priority' => 285])
->set('.data_collector.command', CommandDataCollector::class)
->tag('data_collector', ['template' => '@WebProfiler/Collector/command.html.twig', 'id' => 'command', 'priority' => 335])
;
};

View File

@@ -0,0 +1,411 @@
<?php
/*
* This file is part of the Symfony package.
*
* (c) Fabien Potencier <fabien@symfony.com>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace Symfony\Component\DependencyInjection\Loader\Configurator;
use Symfony\Bundle\FrameworkBundle\Command\AboutCommand;
use Symfony\Bundle\FrameworkBundle\Command\AssetsInstallCommand;
use Symfony\Bundle\FrameworkBundle\Command\CacheClearCommand;
use Symfony\Bundle\FrameworkBundle\Command\CachePoolClearCommand;
use Symfony\Bundle\FrameworkBundle\Command\CachePoolDeleteCommand;
use Symfony\Bundle\FrameworkBundle\Command\CachePoolInvalidateTagsCommand;
use Symfony\Bundle\FrameworkBundle\Command\CachePoolListCommand;
use Symfony\Bundle\FrameworkBundle\Command\CachePoolPruneCommand;
use Symfony\Bundle\FrameworkBundle\Command\CacheWarmupCommand;
use Symfony\Bundle\FrameworkBundle\Command\ConfigDebugCommand;
use Symfony\Bundle\FrameworkBundle\Command\ConfigDumpReferenceCommand;
use Symfony\Bundle\FrameworkBundle\Command\ContainerDebugCommand;
use Symfony\Bundle\FrameworkBundle\Command\ContainerLintCommand;
use Symfony\Bundle\FrameworkBundle\Command\DebugAutowiringCommand;
use Symfony\Bundle\FrameworkBundle\Command\EventDispatcherDebugCommand;
use Symfony\Bundle\FrameworkBundle\Command\RouterDebugCommand;
use Symfony\Bundle\FrameworkBundle\Command\RouterMatchCommand;
use Symfony\Bundle\FrameworkBundle\Command\SecretsDecryptToLocalCommand;
use Symfony\Bundle\FrameworkBundle\Command\SecretsEncryptFromLocalCommand;
use Symfony\Bundle\FrameworkBundle\Command\SecretsGenerateKeysCommand;
use Symfony\Bundle\FrameworkBundle\Command\SecretsListCommand;
use Symfony\Bundle\FrameworkBundle\Command\SecretsRemoveCommand;
use Symfony\Bundle\FrameworkBundle\Command\SecretsRevealCommand;
use Symfony\Bundle\FrameworkBundle\Command\SecretsSetCommand;
use Symfony\Bundle\FrameworkBundle\Command\TranslationDebugCommand;
use Symfony\Bundle\FrameworkBundle\Command\TranslationExtractCommand;
use Symfony\Bundle\FrameworkBundle\Command\WorkflowDumpCommand;
use Symfony\Bundle\FrameworkBundle\Command\YamlLintCommand;
use Symfony\Bundle\FrameworkBundle\Console\Application;
use Symfony\Bundle\FrameworkBundle\EventListener\SuggestMissingPackageSubscriber;
use Symfony\Component\Console\EventListener\ErrorListener;
use Symfony\Component\Console\Messenger\RunCommandMessageHandler;
use Symfony\Component\Dotenv\Command\DebugCommand as DotenvDebugCommand;
use Symfony\Component\ErrorHandler\Command\ErrorDumpCommand;
use Symfony\Component\Messenger\Command\ConsumeMessagesCommand;
use Symfony\Component\Messenger\Command\DebugCommand as MessengerDebugCommand;
use Symfony\Component\Messenger\Command\FailedMessagesRemoveCommand;
use Symfony\Component\Messenger\Command\FailedMessagesRetryCommand;
use Symfony\Component\Messenger\Command\FailedMessagesShowCommand;
use Symfony\Component\Messenger\Command\SetupTransportsCommand;
use Symfony\Component\Messenger\Command\StatsCommand;
use Symfony\Component\Messenger\Command\StopWorkersCommand;
use Symfony\Component\Scheduler\Command\DebugCommand as SchedulerDebugCommand;
use Symfony\Component\Serializer\Command\DebugCommand as SerializerDebugCommand;
use Symfony\Component\Translation\Command\TranslationLintCommand;
use Symfony\Component\Translation\Command\TranslationPullCommand;
use Symfony\Component\Translation\Command\TranslationPushCommand;
use Symfony\Component\Translation\Command\XliffLintCommand;
use Symfony\Component\Validator\Command\DebugCommand as ValidatorDebugCommand;
use Symfony\WebpackEncoreBundle\Asset\EntrypointLookupInterface;
return static function (ContainerConfigurator $container) {
$container->services()
->set('console.error_listener', ErrorListener::class)
->args([
service('logger')->nullOnInvalid(),
])
->tag('kernel.event_subscriber')
->tag('monolog.logger', ['channel' => 'console'])
->set('console.suggest_missing_package_subscriber', SuggestMissingPackageSubscriber::class)
->tag('kernel.event_subscriber')
->set('console.command.about', AboutCommand::class)
->tag('console.command')
->set('console.command.assets_install', AssetsInstallCommand::class)
->args([
service('filesystem'),
param('kernel.project_dir'),
])
->tag('console.command')
->set('console.command.cache_clear', CacheClearCommand::class)
->args([
service('cache_clearer'),
service('filesystem'),
])
->tag('console.command')
->set('console.command.cache_pool_clear', CachePoolClearCommand::class)
->args([
service('cache.global_clearer'),
])
->tag('console.command')
->set('console.command.cache_pool_prune', CachePoolPruneCommand::class)
->args([
[],
])
->tag('console.command')
->set('console.command.cache_pool_invalidate_tags', CachePoolInvalidateTagsCommand::class)
->args([
tagged_locator('cache.taggable', 'pool'),
])
->tag('console.command')
->set('console.command.cache_pool_delete', CachePoolDeleteCommand::class)
->args([
service('cache.global_clearer'),
])
->tag('console.command')
->set('console.command.cache_pool_list', CachePoolListCommand::class)
->args([
null,
])
->tag('console.command')
->set('console.command.cache_warmup', CacheWarmupCommand::class)
->args([
service('cache_warmer'),
])
->tag('console.command')
->set('console.command.config_debug', ConfigDebugCommand::class)
->tag('console.command')
->set('console.command.config_dump_reference', ConfigDumpReferenceCommand::class)
->tag('console.command')
->set('console.command.container_debug', ContainerDebugCommand::class)
->tag('console.command')
->set('console.command.container_lint', ContainerLintCommand::class)
->tag('console.command')
->set('console.command.debug_autowiring', DebugAutowiringCommand::class)
->args([
null,
service('debug.file_link_formatter')->nullOnInvalid(),
])
->tag('console.command')
->set('console.command.dotenv_debug', DotenvDebugCommand::class)
->args([
param('kernel.environment'),
param('kernel.project_dir'),
])
->tag('console.command')
->set('console.command.event_dispatcher_debug', EventDispatcherDebugCommand::class)
->args([
tagged_locator('event_dispatcher.dispatcher', 'name'),
])
->tag('console.command')
->set('console.command.messenger_consume_messages', ConsumeMessagesCommand::class)
->args([
abstract_arg('Routable message bus'),
service('messenger.receiver_locator'),
service('event_dispatcher'),
service('logger')->nullOnInvalid(),
[], // Receiver names
service('messenger.listener.reset_services')->nullOnInvalid(),
[], // Bus names
service('messenger.rate_limiter_locator')->nullOnInvalid(),
null,
])
->tag('console.command')
->tag('monolog.logger', ['channel' => 'messenger'])
->set('console.command.messenger_setup_transports', SetupTransportsCommand::class)
->args([
service('messenger.receiver_locator'),
[], // Receiver names
])
->tag('console.command')
->set('console.command.messenger_debug', MessengerDebugCommand::class)
->args([
[], // Message to handlers mapping
])
->tag('console.command')
->set('console.command.messenger_stop_workers', StopWorkersCommand::class)
->args([
service('cache.messenger.restart_workers_signal'),
])
->tag('console.command')
->set('console.command.messenger_failed_messages_retry', FailedMessagesRetryCommand::class)
->args([
abstract_arg('Default failure receiver name'),
abstract_arg('Receivers'),
service('messenger.routable_message_bus'),
service('event_dispatcher'),
service('logger')->nullOnInvalid(),
service('messenger.transport.native_php_serializer')->nullOnInvalid(),
null,
])
->tag('console.command')
->tag('monolog.logger', ['channel' => 'messenger'])
->set('console.command.messenger_failed_messages_show', FailedMessagesShowCommand::class)
->args([
abstract_arg('Default failure receiver name'),
abstract_arg('Receivers'),
service('messenger.transport.native_php_serializer')->nullOnInvalid(),
])
->tag('console.command')
->set('console.command.messenger_failed_messages_remove', FailedMessagesRemoveCommand::class)
->args([
abstract_arg('Default failure receiver name'),
abstract_arg('Receivers'),
service('messenger.transport.native_php_serializer')->nullOnInvalid(),
])
->tag('console.command')
->set('console.command.messenger_stats', StatsCommand::class)
->args([
service('messenger.receiver_locator'),
abstract_arg('Receivers names'),
])
->tag('console.command')
->set('console.command.scheduler_debug', SchedulerDebugCommand::class)
->args([
tagged_locator('scheduler.schedule_provider', 'name'),
])
->tag('console.command')
->set('console.command.router_debug', RouterDebugCommand::class)
->args([
service('router'),
service('debug.file_link_formatter')->nullOnInvalid(),
])
->tag('console.command')
->set('console.command.router_match', RouterMatchCommand::class)
->args([
service('router'),
tagged_iterator('routing.expression_language_provider'),
])
->tag('console.command')
->set('console.command.serializer_debug', SerializerDebugCommand::class)
->args([
service('serializer.mapping.class_metadata_factory'),
])
->tag('console.command')
->set('console.command.translation_debug', TranslationDebugCommand::class)
->args([
service('translator'),
service('translation.reader'),
service('translation.extractor'),
param('translator.default_path'),
null, // twig.default_path
[], // Translator paths
[], // Twig paths
param('kernel.enabled_locales'),
])
->tag('console.command')
->set('console.command.translation_extract', TranslationExtractCommand::class)
->args([
service('translation.writer'),
service('translation.reader'),
service('translation.extractor'),
param('kernel.default_locale'),
param('translator.default_path'),
null, // twig.default_path
[], // Translator paths
[], // Twig paths
param('kernel.enabled_locales'),
])
->tag('console.command')
->set('console.command.validator_debug', ValidatorDebugCommand::class)
->args([
service('validator'),
])
->tag('console.command')
->set('console.command.translation_pull', TranslationPullCommand::class)
->args([
service('translation.provider_collection'),
service('translation.writer'),
service('translation.reader'),
param('kernel.default_locale'),
[], // Translator paths
[], // Enabled locales
])
->tag('console.command', ['command' => 'translation:pull'])
->set('console.command.translation_push', TranslationPushCommand::class)
->args([
service('translation.provider_collection'),
service('translation.reader'),
[], // Translator paths
[], // Enabled locales
])
->tag('console.command', ['command' => 'translation:push'])
->set('console.command.workflow_dump', WorkflowDumpCommand::class)
->args([
tagged_locator('workflow', 'name'),
])
->tag('console.command')
->set('console.command.xliff_lint', XliffLintCommand::class)
->tag('console.command')
->set('console.command.yaml_lint', YamlLintCommand::class)
->tag('console.command')
->set('console.command.translation_lint', TranslationLintCommand::class)
->args([
service('translator'),
param('kernel.enabled_locales'),
])
->tag('console.command')
->set('console.command.form_debug', \Symfony\Component\Form\Command\DebugCommand::class)
->args([
service('form.registry'),
[], // All form types namespaces are stored here by FormPass
[], // All services form types are stored here by FormPass
[], // All type extensions are stored here by FormPass
[], // All type guessers are stored here by FormPass
service('debug.file_link_formatter')->nullOnInvalid(),
])
->tag('console.command')
->set('console.command.secrets_set', SecretsSetCommand::class)
->args([
service('secrets.vault'),
service('secrets.local_vault')->nullOnInvalid(),
])
->tag('console.command')
->set('console.command.secrets_remove', SecretsRemoveCommand::class)
->args([
service('secrets.vault'),
service('secrets.local_vault')->nullOnInvalid(),
])
->tag('console.command')
->set('console.command.secrets_generate_key', SecretsGenerateKeysCommand::class)
->args([
service('secrets.vault'),
service('secrets.local_vault')->ignoreOnInvalid(),
])
->tag('console.command')
->set('console.command.secrets_list', SecretsListCommand::class)
->args([
service('secrets.vault'),
service('secrets.local_vault')->ignoreOnInvalid(),
])
->tag('console.command')
->set('console.command.secrets_reveal', SecretsRevealCommand::class)
->args([
service('secrets.vault'),
service('secrets.local_vault')->ignoreOnInvalid(),
])
->tag('console.command')
->set('console.command.secrets_decrypt_to_local', SecretsDecryptToLocalCommand::class)
->args([
service('secrets.vault'),
service('secrets.local_vault')->ignoreOnInvalid(),
])
->tag('console.command')
->set('console.command.secrets_encrypt_from_local', SecretsEncryptFromLocalCommand::class)
->args([
service('secrets.vault'),
service('secrets.local_vault')->ignoreOnInvalid(),
])
->tag('console.command')
->set('console.command.error_dumper', ErrorDumpCommand::class)
->args([
service('filesystem'),
service('error_renderer.html'),
service(EntrypointLookupInterface::class)->nullOnInvalid(),
])
->tag('console.command')
->set('console.messenger.application', Application::class)
->share(false)
->call('setAutoExit', [false])
->args([
service('kernel'),
])
->set('console.messenger.execute_command_handler', RunCommandMessageHandler::class)
->args([
service('console.messenger.application'),
])
->tag('messenger.message_handler')
;
};

View File

@@ -0,0 +1,51 @@
<?php
/*
* This file is part of the Symfony package.
*
* (c) Fabien Potencier <fabien@symfony.com>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace Symfony\Component\DependencyInjection\Loader\Configurator;
use Symfony\Component\HttpKernel\Controller\ArgumentResolver\NotTaggedControllerValueResolver;
use Symfony\Component\HttpKernel\Controller\TraceableArgumentResolver;
use Symfony\Component\HttpKernel\Controller\TraceableControllerResolver;
use Symfony\Component\HttpKernel\Debug\TraceableEventDispatcher;
return static function (ContainerConfigurator $container) {
$container->services()
->set('debug.event_dispatcher', TraceableEventDispatcher::class)
->decorate('event_dispatcher')
->args([
service('debug.event_dispatcher.inner'),
service('debug.stopwatch'),
service('logger')->nullOnInvalid(),
service('.virtual_request_stack')->nullOnInvalid(),
service('profiler.is_disabled_state_checker')->nullOnInvalid(),
])
->tag('monolog.logger', ['channel' => 'event'])
->tag('kernel.reset', ['method' => 'reset'])
->set('debug.controller_resolver', TraceableControllerResolver::class)
->decorate('controller_resolver')
->args([
service('debug.controller_resolver.inner'),
service('debug.stopwatch'),
])
->set('debug.argument_resolver', TraceableArgumentResolver::class)
->decorate('argument_resolver')
->args([
service('debug.argument_resolver.inner'),
service('debug.stopwatch'),
])
->set('argument_resolver.not_tagged_controller', NotTaggedControllerValueResolver::class)
->args([abstract_arg('Controller argument, set in FrameworkExtension')])
->tag('controller.argument_value_resolver', ['priority' => -200])
;
};

View File

@@ -0,0 +1,43 @@
<?php
/*
* This file is part of the Symfony package.
*
* (c) Fabien Potencier <fabien@symfony.com>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace Symfony\Component\DependencyInjection\Loader\Configurator;
use Symfony\Component\ErrorHandler\ErrorRenderer\FileLinkFormatter;
use Symfony\Component\HttpKernel\Debug\ErrorHandlerConfigurator;
use Symfony\Component\HttpKernel\EventListener\DebugHandlersListener;
return static function (ContainerConfigurator $container) {
$container->parameters()->set('debug.error_handler.throw_at', -1);
$container->services()
->set('debug.error_handler_configurator', ErrorHandlerConfigurator::class)
->public()
->args([
service('logger')->nullOnInvalid(),
null, // Log levels map for enabled error levels
param('debug.error_handler.throw_at'),
param('kernel.debug'),
param('kernel.debug'),
null, // Deprecation logger if different from the one above
])
->tag('monolog.logger', ['channel' => 'php'])
->set('debug.debug_handlers_listener', DebugHandlersListener::class)
->args([null, param('kernel.runtime_mode.web')])
->tag('kernel.event_subscriber')
->set('debug.file_link_formatter', FileLinkFormatter::class)
->args([param('debug.file_link_format')])
->alias(FileLinkFormatter::class, 'debug.file_link_formatter')
;
};

View File

@@ -0,0 +1,38 @@
<?php
/*
* This file is part of the Symfony package.
*
* (c) Fabien Potencier <fabien@symfony.com>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace Symfony\Component\DependencyInjection\Loader\Configurator;
use Symfony\Component\ErrorHandler\ErrorRenderer\HtmlErrorRenderer;
return static function (ContainerConfigurator $container) {
$container->services()
->set('error_handler.error_renderer.html', HtmlErrorRenderer::class)
->args([
inline_service()
->factory([HtmlErrorRenderer::class, 'isDebug'])
->args([
service('request_stack'),
param('kernel.debug'),
]),
param('kernel.charset'),
service('debug.file_link_formatter')->nullOnInvalid(),
param('kernel.project_dir'),
inline_service()
->factory([HtmlErrorRenderer::class, 'getAndCleanOutputBuffer'])
->args([service('request_stack')]),
service('logger')->nullOnInvalid(),
])
->alias('error_renderer.html', 'error_handler.error_renderer.html')
->alias('error_renderer', 'error_renderer.html')
;
};

View File

@@ -0,0 +1,25 @@
<?php
/*
* This file is part of the Symfony package.
*
* (c) Fabien Potencier <fabien@symfony.com>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace Symfony\Component\DependencyInjection\Loader\Configurator;
use Symfony\Component\HttpKernel\EventListener\SurrogateListener;
use Symfony\Component\HttpKernel\HttpCache\Esi;
return static function (ContainerConfigurator $container) {
$container->services()
->set('esi', Esi::class)
->set('esi_listener', SurrogateListener::class)
->args([service('esi')->ignoreOnInvalid()])
->tag('kernel.event_subscriber')
;
};

View File

@@ -0,0 +1,154 @@
<?php
/*
* This file is part of the Symfony package.
*
* (c) Fabien Potencier <fabien@symfony.com>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace Symfony\Component\DependencyInjection\Loader\Configurator;
use Symfony\Component\Form\ChoiceList\Factory\CachingFactoryDecorator;
use Symfony\Component\Form\ChoiceList\Factory\DefaultChoiceListFactory;
use Symfony\Component\Form\ChoiceList\Factory\PropertyAccessDecorator;
use Symfony\Component\Form\Extension\Core\Type\ChoiceType;
use Symfony\Component\Form\Extension\Core\Type\ColorType;
use Symfony\Component\Form\Extension\Core\Type\FileType;
use Symfony\Component\Form\Extension\Core\Type\FormType;
use Symfony\Component\Form\Extension\Core\Type\SubmitType;
use Symfony\Component\Form\Extension\Core\Type\TextType;
use Symfony\Component\Form\Extension\Core\Type\TransformationFailureExtension;
use Symfony\Component\Form\Extension\DependencyInjection\DependencyInjectionExtension;
use Symfony\Component\Form\Extension\HtmlSanitizer\Type\TextTypeHtmlSanitizerExtension;
use Symfony\Component\Form\Extension\HttpFoundation\HttpFoundationRequestHandler;
use Symfony\Component\Form\Extension\HttpFoundation\Type\FormTypeHttpFoundationExtension;
use Symfony\Component\Form\Extension\Validator\Type\FormTypeValidatorExtension;
use Symfony\Component\Form\Extension\Validator\Type\RepeatedTypeValidatorExtension;
use Symfony\Component\Form\Extension\Validator\Type\SubmitTypeValidatorExtension;
use Symfony\Component\Form\Extension\Validator\Type\UploadValidatorExtension;
use Symfony\Component\Form\Extension\Validator\ValidatorTypeGuesser;
use Symfony\Component\Form\FormFactory;
use Symfony\Component\Form\FormFactoryInterface;
use Symfony\Component\Form\FormRegistry;
use Symfony\Component\Form\FormRegistryInterface;
use Symfony\Component\Form\ResolvedFormTypeFactory;
use Symfony\Component\Form\ResolvedFormTypeFactoryInterface;
use Symfony\Component\Form\Util\ServerParams;
return static function (ContainerConfigurator $container) {
$container->services()
->set('form.resolved_type_factory', ResolvedFormTypeFactory::class)
->alias(ResolvedFormTypeFactoryInterface::class, 'form.resolved_type_factory')
->set('form.registry', FormRegistry::class)
->args([
[
/*
* We don't need to be able to add more extensions.
* more types can be registered with the form.type tag
* more type extensions can be registered with the form.type_extension tag
* more type_guessers can be registered with the form.type_guesser tag
*/
service('form.extension'),
],
service('form.resolved_type_factory'),
])
->alias(FormRegistryInterface::class, 'form.registry')
->set('form.factory', FormFactory::class)
->args([service('form.registry')])
->alias(FormFactoryInterface::class, 'form.factory')
->set('form.extension', DependencyInjectionExtension::class)
->args([
abstract_arg('All services with tag "form.type" are stored in a service locator by FormPass'),
abstract_arg('All services with tag "form.type_extension" are stored here by FormPass'),
abstract_arg('All services with tag "form.type_guesser" are stored here by FormPass'),
])
->set('form.type_guesser.validator', ValidatorTypeGuesser::class)
->args([service('validator.mapping.class_metadata_factory')])
->tag('form.type_guesser')
->alias('form.property_accessor', 'property_accessor')
->set('form.choice_list_factory.default', DefaultChoiceListFactory::class)
->set('form.choice_list_factory.property_access', PropertyAccessDecorator::class)
->args([
service('form.choice_list_factory.default'),
service('form.property_accessor'),
])
->set('form.choice_list_factory.cached', CachingFactoryDecorator::class)
->args([service('form.choice_list_factory.property_access')])
->tag('kernel.reset', ['method' => 'reset'])
->alias('form.choice_list_factory', 'form.choice_list_factory.cached')
->set('form.type.form', FormType::class)
->args([service('form.property_accessor')])
->tag('form.type')
->set('form.type.choice', ChoiceType::class)
->args([
service('form.choice_list_factory'),
service('translator')->ignoreOnInvalid(),
])
->tag('form.type')
->set('form.type.file', FileType::class)
->args([service('translator')->ignoreOnInvalid()])
->tag('form.type')
->set('form.type.color', ColorType::class)
->args([service('translator')->ignoreOnInvalid()])
->tag('form.type')
->set('form.type_extension.form.transformation_failure_handling', TransformationFailureExtension::class)
->args([service('translator')->ignoreOnInvalid()])
->tag('form.type_extension', ['extended-type' => FormType::class])
->set('form.type_extension.form.html_sanitizer', TextTypeHtmlSanitizerExtension::class)
->args([tagged_locator('html_sanitizer', 'sanitizer')])
->tag('form.type_extension', ['extended-type' => TextType::class])
->set('form.type_extension.form.http_foundation', FormTypeHttpFoundationExtension::class)
->args([service('form.type_extension.form.request_handler')])
->tag('form.type_extension')
->set('form.type_extension.form.request_handler', HttpFoundationRequestHandler::class)
->args([service('form.server_params')])
->set('form.server_params', ServerParams::class)
->args([service('request_stack')])
->set('form.type_extension.form.validator', FormTypeValidatorExtension::class)
->args([
service('validator'),
false,
service('twig.form.renderer')->ignoreOnInvalid(),
service('translator')->ignoreOnInvalid(),
])
->tag('form.type_extension', ['extended-type' => FormType::class])
->set('form.type_extension.repeated.validator', RepeatedTypeValidatorExtension::class)
->tag('form.type_extension')
->set('form.type_extension.submit.validator', SubmitTypeValidatorExtension::class)
->tag('form.type_extension', ['extended-type' => SubmitType::class])
->set('form.type_extension.upload.validator', UploadValidatorExtension::class)
->args([
service('translator'),
param('validator.translation_domain'),
])
->tag('form.type_extension')
;
};

View File

@@ -0,0 +1,31 @@
<?php
/*
* This file is part of the Symfony package.
*
* (c) Fabien Potencier <fabien@symfony.com>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace Symfony\Component\DependencyInjection\Loader\Configurator;
use Symfony\Component\Form\Extension\Csrf\Type\FormTypeCsrfExtension;
return static function (ContainerConfigurator $container) {
$container->services()
->set('form.type_extension.csrf', FormTypeCsrfExtension::class)
->args([
service('security.csrf.token_manager'),
param('form.type_extension.csrf.enabled'),
param('form.type_extension.csrf.field_name'),
service('translator')->nullOnInvalid(),
param('validator.translation_domain'),
service('form.server_params'),
param('form.type_extension.csrf.field_attr'),
param('.form.type_extension.csrf.token_id'),
])
->tag('form.type_extension')
;
};

View File

@@ -0,0 +1,38 @@
<?php
/*
* This file is part of the Symfony package.
*
* (c) Fabien Potencier <fabien@symfony.com>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace Symfony\Component\DependencyInjection\Loader\Configurator;
use Symfony\Component\Form\Extension\DataCollector\FormDataCollector;
use Symfony\Component\Form\Extension\DataCollector\FormDataExtractor;
use Symfony\Component\Form\Extension\DataCollector\Proxy\ResolvedTypeFactoryDataCollectorProxy;
use Symfony\Component\Form\Extension\DataCollector\Type\DataCollectorTypeExtension;
use Symfony\Component\Form\ResolvedFormTypeFactory;
return static function (ContainerConfigurator $container) {
$container->services()
->set('form.resolved_type_factory', ResolvedTypeFactoryDataCollectorProxy::class)
->args([
inline_service(ResolvedFormTypeFactory::class),
service('data_collector.form'),
])
->set('form.type_extension.form.data_collector', DataCollectorTypeExtension::class)
->args([service('data_collector.form')])
->tag('form.type_extension')
->set('data_collector.form.extractor', FormDataExtractor::class)
->set('data_collector.form', FormDataCollector::class)
->args([service('data_collector.form.extractor')])
->tag('data_collector', ['template' => '@WebProfiler/Collector/form.html.twig', 'id' => 'form', 'priority' => 310])
;
};

View File

@@ -0,0 +1,22 @@
<?php
/*
* This file is part of the Symfony package.
*
* (c) Fabien Potencier <fabien@symfony.com>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace Symfony\Component\DependencyInjection\Loader\Configurator;
use Symfony\Component\HttpKernel\EventListener\FragmentListener;
return static function (ContainerConfigurator $container) {
$container->services()
->set('fragment.listener', FragmentListener::class)
->args([service('uri_signer'), param('fragment.path')])
->tag('kernel.event_subscriber')
;
};

View File

@@ -0,0 +1,71 @@
<?php
/*
* This file is part of the Symfony package.
*
* (c) Fabien Potencier <fabien@symfony.com>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace Symfony\Component\DependencyInjection\Loader\Configurator;
use Symfony\Component\HttpKernel\DependencyInjection\LazyLoadingFragmentHandler;
use Symfony\Component\HttpKernel\Fragment\EsiFragmentRenderer;
use Symfony\Component\HttpKernel\Fragment\FragmentUriGenerator;
use Symfony\Component\HttpKernel\Fragment\FragmentUriGeneratorInterface;
use Symfony\Component\HttpKernel\Fragment\HIncludeFragmentRenderer;
use Symfony\Component\HttpKernel\Fragment\InlineFragmentRenderer;
use Symfony\Component\HttpKernel\Fragment\SsiFragmentRenderer;
return static function (ContainerConfigurator $container) {
$container->parameters()
->set('fragment.renderer.hinclude.global_template', null)
->set('fragment.path', '/_fragment')
;
$container->services()
->set('fragment.handler', LazyLoadingFragmentHandler::class)
->args([
abstract_arg('fragment renderer locator'),
service('request_stack'),
param('kernel.debug'),
])
->set('fragment.uri_generator', FragmentUriGenerator::class)
->args([param('fragment.path'), service('uri_signer'), service('request_stack')])
->alias(FragmentUriGeneratorInterface::class, 'fragment.uri_generator')
->set('fragment.renderer.inline', InlineFragmentRenderer::class)
->args([service('http_kernel'), service('event_dispatcher')])
->call('setFragmentPath', [param('fragment.path')])
->tag('kernel.fragment_renderer', ['alias' => 'inline'])
->set('fragment.renderer.hinclude', HIncludeFragmentRenderer::class)
->args([
service('twig')->nullOnInvalid(),
service('uri_signer'),
param('fragment.renderer.hinclude.global_template'),
])
->call('setFragmentPath', [param('fragment.path')])
->set('fragment.renderer.esi', EsiFragmentRenderer::class)
->args([
service('esi')->nullOnInvalid(),
service('fragment.renderer.inline'),
service('uri_signer'),
])
->call('setFragmentPath', [param('fragment.path')])
->tag('kernel.fragment_renderer', ['alias' => 'esi'])
->set('fragment.renderer.ssi', SsiFragmentRenderer::class)
->args([
service('ssi')->nullOnInvalid(),
service('fragment.renderer.inline'),
service('uri_signer'),
])
->call('setFragmentPath', [param('fragment.path')])
->tag('kernel.fragment_renderer', ['alias' => 'ssi'])
;
};

View File

@@ -0,0 +1,30 @@
<?php
/*
* This file is part of the Symfony package.
*
* (c) Fabien Potencier <fabien@symfony.com>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace Symfony\Component\DependencyInjection\Loader\Configurator;
use Symfony\Component\HtmlSanitizer\HtmlSanitizer;
use Symfony\Component\HtmlSanitizer\HtmlSanitizerConfig;
use Symfony\Component\HtmlSanitizer\HtmlSanitizerInterface;
return static function (ContainerConfigurator $container) {
$container->services()
->set('html_sanitizer.config.default', HtmlSanitizerConfig::class)
->call('allowSafeElements', [], true)
->set('html_sanitizer.sanitizer.default', HtmlSanitizer::class)
->args([service('html_sanitizer.config.default')])
->tag('html_sanitizer', ['sanitizer' => 'default'])
->alias('html_sanitizer', 'html_sanitizer.sanitizer.default')
->alias(HtmlSanitizerInterface::class, 'html_sanitizer')
;
};

View File

@@ -0,0 +1,100 @@
<?php
/*
* This file is part of the Symfony package.
*
* (c) Fabien Potencier <fabien@symfony.com>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace Symfony\Component\DependencyInjection\Loader\Configurator;
use Http\Client\HttpAsyncClient;
use Psr\Http\Client\ClientInterface;
use Psr\Http\Message\ResponseFactoryInterface;
use Psr\Http\Message\StreamFactoryInterface;
use Symfony\Component\HttpClient\HttpClient;
use Symfony\Component\HttpClient\HttplugClient;
use Symfony\Component\HttpClient\Messenger\PingWebhookMessageHandler;
use Symfony\Component\HttpClient\Psr18Client;
use Symfony\Component\HttpClient\Retry\GenericRetryStrategy;
use Symfony\Component\HttpClient\UriTemplateHttpClient;
use Symfony\Contracts\HttpClient\HttpClientInterface;
return static function (ContainerConfigurator $container) {
$container->services()
->set('http_client.transport', HttpClientInterface::class)
->factory([HttpClient::class, 'create'])
->args([
[], // default options
abstract_arg('max host connections'),
])
->call('setLogger', [service('logger')->ignoreOnInvalid()])
->tag('monolog.logger', ['channel' => 'http_client'])
->tag('kernel.reset', ['method' => 'reset', 'on_invalid' => 'ignore'])
->set('http_client', HttpClientInterface::class)
->factory('current')
->args([[service('http_client.transport')]])
->tag('http_client.client')
->tag('kernel.reset', ['method' => 'reset', 'on_invalid' => 'ignore'])
->alias(HttpClientInterface::class, 'http_client')
->set('psr18.http_client', Psr18Client::class)
->args([
service('http_client'),
service(ResponseFactoryInterface::class)->ignoreOnInvalid(),
service(StreamFactoryInterface::class)->ignoreOnInvalid(),
])
->alias(ClientInterface::class, 'psr18.http_client')
->set('httplug.http_client', HttplugClient::class)
->args([
service('http_client'),
service(ResponseFactoryInterface::class)->ignoreOnInvalid(),
service(StreamFactoryInterface::class)->ignoreOnInvalid(),
])
->alias(HttpAsyncClient::class, 'httplug.http_client')
->set('http_client.abstract_retry_strategy', GenericRetryStrategy::class)
->abstract()
->args([
abstract_arg('http codes'),
abstract_arg('delay ms'),
abstract_arg('multiplier'),
abstract_arg('max delay ms'),
abstract_arg('jitter'),
])
->set('http_client.uri_template', UriTemplateHttpClient::class)
->decorate('http_client', null, 7) // Between TraceableHttpClient (5) and RetryableHttpClient (10)
->args([
service('.inner'),
service('http_client.uri_template_expander')->nullOnInvalid(),
abstract_arg('default vars'),
])
->set('http_client.uri_template_expander.guzzle', \Closure::class)
->factory([\Closure::class, 'fromCallable'])
->args([
[\GuzzleHttp\UriTemplate\UriTemplate::class, 'expand'],
])
->set('http_client.uri_template_expander.rize', \Closure::class)
->factory([\Closure::class, 'fromCallable'])
->args([
[inline_service(\Rize\UriTemplate::class), 'expand'],
])
->set('http_client.messenger.ping_webhook_handler', PingWebhookMessageHandler::class)
->args([
service('http_client'),
])
->tag('messenger.message_handler')
;
};

View File

@@ -0,0 +1,25 @@
<?php
/*
* This file is part of the Symfony package.
*
* (c) Fabien Potencier <fabien@symfony.com>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace Symfony\Component\DependencyInjection\Loader\Configurator;
use Symfony\Component\HttpClient\DataCollector\HttpClientDataCollector;
return static function (ContainerConfigurator $container) {
$container->services()
->set('data_collector.http_client', HttpClientDataCollector::class)
->tag('data_collector', [
'template' => '@WebProfiler/Collector/http_client.html.twig',
'id' => 'http_client',
'priority' => 250,
])
;
};

View File

@@ -0,0 +1,24 @@
<?php
/*
* This file is part of the Symfony package.
*
* (c) Fabien Potencier <fabien@symfony.com>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace Symfony\Component\DependencyInjection\Loader\Configurator;
use Symfony\Component\Translation\IdentityTranslator;
use Symfony\Contracts\Translation\TranslatorInterface;
return static function (ContainerConfigurator $container) {
$container->services()
->set('translator', IdentityTranslator::class)
->alias(TranslatorInterface::class, 'translator')
->set('identity_translator', IdentityTranslator::class)
;
};

View File

@@ -0,0 +1,119 @@
<?php
/*
* This file is part of the Symfony package.
*
* (c) Fabien Potencier <fabien@symfony.com>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace Symfony\Component\DependencyInjection\Loader\Configurator;
use Symfony\Component\JsonStreamer\CacheWarmer\LazyGhostCacheWarmer;
use Symfony\Component\JsonStreamer\CacheWarmer\StreamerCacheWarmer;
use Symfony\Component\JsonStreamer\JsonStreamReader;
use Symfony\Component\JsonStreamer\JsonStreamWriter;
use Symfony\Component\JsonStreamer\Mapping\GenericTypePropertyMetadataLoader;
use Symfony\Component\JsonStreamer\Mapping\PropertyMetadataLoader;
use Symfony\Component\JsonStreamer\Mapping\Read\AttributePropertyMetadataLoader as ReadAttributePropertyMetadataLoader;
use Symfony\Component\JsonStreamer\Mapping\Read\DateTimeTypePropertyMetadataLoader as ReadDateTimeTypePropertyMetadataLoader;
use Symfony\Component\JsonStreamer\Mapping\Write\AttributePropertyMetadataLoader as WriteAttributePropertyMetadataLoader;
use Symfony\Component\JsonStreamer\Mapping\Write\DateTimeTypePropertyMetadataLoader as WriteDateTimeTypePropertyMetadataLoader;
use Symfony\Component\JsonStreamer\ValueTransformer\DateTimeToStringValueTransformer;
use Symfony\Component\JsonStreamer\ValueTransformer\StringToDateTimeValueTransformer;
return static function (ContainerConfigurator $container) {
$container->services()
// stream reader/writer
->set('json_streamer.stream_writer', JsonStreamWriter::class)
->args([
tagged_locator('json_streamer.value_transformer'),
service('json_streamer.write.property_metadata_loader'),
param('.json_streamer.stream_writers_dir'),
])
->set('json_streamer.stream_reader', JsonStreamReader::class)
->args([
tagged_locator('json_streamer.value_transformer'),
service('json_streamer.read.property_metadata_loader'),
param('.json_streamer.stream_readers_dir'),
param('.json_streamer.lazy_ghosts_dir'),
])
->alias(JsonStreamWriter::class, 'json_streamer.stream_writer')
->alias(JsonStreamReader::class, 'json_streamer.stream_reader')
// metadata
->set('json_streamer.write.property_metadata_loader', PropertyMetadataLoader::class)
->args([
service('type_info.resolver'),
])
->set('.json_streamer.write.property_metadata_loader.generic', GenericTypePropertyMetadataLoader::class)
->decorate('json_streamer.write.property_metadata_loader')
->args([
service('.inner'),
service('type_info.type_context_factory'),
])
->set('.json_streamer.write.property_metadata_loader.date_time', WriteDateTimeTypePropertyMetadataLoader::class)
->decorate('json_streamer.write.property_metadata_loader')
->args([
service('.inner'),
])
->set('.json_streamer.write.property_metadata_loader.attribute', WriteAttributePropertyMetadataLoader::class)
->decorate('json_streamer.write.property_metadata_loader')
->args([
service('.inner'),
tagged_locator('json_streamer.value_transformer'),
service('type_info.resolver'),
])
->set('json_streamer.read.property_metadata_loader', PropertyMetadataLoader::class)
->args([
service('type_info.resolver'),
])
->set('.json_streamer.read.property_metadata_loader.generic', GenericTypePropertyMetadataLoader::class)
->decorate('json_streamer.read.property_metadata_loader')
->args([
service('.inner'),
service('type_info.type_context_factory'),
])
->set('.json_streamer.read.property_metadata_loader.date_time', ReadDateTimeTypePropertyMetadataLoader::class)
->decorate('json_streamer.read.property_metadata_loader')
->args([
service('.inner'),
])
->set('.json_streamer.read.property_metadata_loader.attribute', ReadAttributePropertyMetadataLoader::class)
->decorate('json_streamer.read.property_metadata_loader')
->args([
service('.inner'),
tagged_locator('json_streamer.value_transformer'),
service('type_info.resolver'),
])
// value transformers
->set('json_streamer.value_transformer.date_time_to_string', DateTimeToStringValueTransformer::class)
->tag('json_streamer.value_transformer')
->set('json_streamer.value_transformer.string_to_date_time', StringToDateTimeValueTransformer::class)
->tag('json_streamer.value_transformer')
// cache
->set('.json_streamer.cache_warmer.streamer', StreamerCacheWarmer::class)
->args([
abstract_arg('streamable'),
service('json_streamer.write.property_metadata_loader'),
service('json_streamer.read.property_metadata_loader'),
param('.json_streamer.stream_writers_dir'),
param('.json_streamer.stream_readers_dir'),
service('logger')->ignoreOnInvalid(),
])
->tag('kernel.cache_warmer')
->set('.json_streamer.cache_warmer.lazy_ghost', LazyGhostCacheWarmer::class)
->args([
abstract_arg('streamable class names'),
param('.json_streamer.lazy_ghosts_dir'),
])
->tag('kernel.cache_warmer')
;
};

View File

@@ -0,0 +1,30 @@
<?php
/*
* This file is part of the Symfony package.
*
* (c) Fabien Potencier <fabien@symfony.com>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace Symfony\Component\DependencyInjection\Loader\Configurator;
use Symfony\Component\Lock\LockFactory;
use Symfony\Component\Lock\Store\CombinedStore;
use Symfony\Component\Lock\Strategy\ConsensusStrategy;
return static function (ContainerConfigurator $container) {
$container->services()
->set('lock.store.combined.abstract', CombinedStore::class)->abstract()
->args([abstract_arg('List of stores'), service('lock.strategy.majority')])
->set('lock.strategy.majority', ConsensusStrategy::class)
->set('lock.factory.abstract', LockFactory::class)->abstract()
->args([abstract_arg('Store')])
->call('setLogger', [service('logger')->ignoreOnInvalid()])
->tag('monolog.logger', ['channel' => 'lock'])
;
};

View File

@@ -0,0 +1,125 @@
<?php
/*
* This file is part of the Symfony package.
*
* (c) Fabien Potencier <fabien@symfony.com>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace Symfony\Component\DependencyInjection\Loader\Configurator;
use Symfony\Component\Mailer\Command\MailerTestCommand;
use Symfony\Component\Mailer\EventListener\DkimSignedMessageListener;
use Symfony\Component\Mailer\EventListener\EnvelopeListener;
use Symfony\Component\Mailer\EventListener\MessageListener;
use Symfony\Component\Mailer\EventListener\MessageLoggerListener;
use Symfony\Component\Mailer\EventListener\MessengerTransportListener;
use Symfony\Component\Mailer\EventListener\SmimeEncryptedMessageListener;
use Symfony\Component\Mailer\EventListener\SmimeSignedMessageListener;
use Symfony\Component\Mailer\Mailer;
use Symfony\Component\Mailer\MailerInterface;
use Symfony\Component\Mailer\Messenger\MessageHandler;
use Symfony\Component\Mailer\Transport;
use Symfony\Component\Mailer\Transport\TransportInterface;
use Symfony\Component\Mailer\Transport\Transports;
use Symfony\Component\Mime\Crypto\DkimSigner;
use Symfony\Component\Mime\Crypto\SMimeSigner;
return static function (ContainerConfigurator $container) {
$container->services()
->set('mailer.mailer', Mailer::class)
->args([
service('mailer.transports'),
abstract_arg('message bus'),
service('event_dispatcher')->ignoreOnInvalid(),
])
->alias('mailer', 'mailer.mailer')
->alias(MailerInterface::class, 'mailer.mailer')
->set('mailer.transports', Transports::class)
->factory([service('mailer.transport_factory'), 'fromStrings'])
->args([
abstract_arg('transports'),
])
->set('mailer.transport_factory', Transport::class)
->args([
tagged_iterator('mailer.transport_factory'),
])
->alias('mailer.default_transport', 'mailer.transports')
->alias(TransportInterface::class, 'mailer.default_transport')
->set('mailer.messenger.message_handler', MessageHandler::class)
->args([
service('mailer.transports'),
])
->tag('messenger.message_handler')
->set('mailer.envelope_listener', EnvelopeListener::class)
->args([
abstract_arg('sender'),
abstract_arg('recipients'),
])
->tag('kernel.event_subscriber')
->set('mailer.message_listener', MessageListener::class)
->args([
abstract_arg('headers'),
])
->tag('kernel.event_subscriber')
->set('mailer.message_logger_listener', MessageLoggerListener::class)
->tag('kernel.event_subscriber')
->tag('kernel.reset', ['method' => 'reset'])
->set('mailer.messenger_transport_listener', MessengerTransportListener::class)
->tag('kernel.event_subscriber')
->set('mailer.dkim_signer', DkimSigner::class)
->args([
abstract_arg('key'),
abstract_arg('domain'),
abstract_arg('select'),
abstract_arg('options'),
abstract_arg('passphrase'),
])
->set('mailer.smime_signer', SMimeSigner::class)
->args([
abstract_arg('certificate'),
abstract_arg('key'),
abstract_arg('passphrase'),
abstract_arg('extraCertificates'),
abstract_arg('signOptions'),
])
->set('mailer.dkim_signer.listener', DkimSignedMessageListener::class)
->args([
service('mailer.dkim_signer'),
])
->tag('kernel.event_subscriber')
->set('mailer.smime_signer.listener', SmimeSignedMessageListener::class)
->args([
service('mailer.smime_signer'),
])
->tag('kernel.event_subscriber')
->set('mailer.smime_encrypter.listener', SmimeEncryptedMessageListener::class)
->args([
service('mailer.smime_encrypter.repository'),
param('mailer.smime_encrypter.cipher'),
])
->tag('kernel.event_subscriber')
->set('console.command.mailer_test', MailerTestCommand::class)
->args([
service('mailer.transports'),
])
->tag('console.command')
;
};

View File

@@ -0,0 +1,27 @@
<?php
/*
* This file is part of the Symfony package.
*
* (c) Fabien Potencier <fabien@symfony.com>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace Symfony\Component\DependencyInjection\Loader\Configurator;
use Symfony\Component\Mailer\DataCollector\MessageDataCollector;
return static function (ContainerConfigurator $container) {
$container->services()
->set('mailer.data_collector', MessageDataCollector::class)
->args([
service('mailer.message_logger_listener'),
])
->tag('data_collector', [
'template' => '@WebProfiler/Collector/mailer.html.twig',
'id' => 'mailer',
])
;
};

View File

@@ -0,0 +1,82 @@
<?php
/*
* This file is part of the Symfony package.
*
* (c) Fabien Potencier <fabien@symfony.com>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace Symfony\Component\DependencyInjection\Loader\Configurator;
use Symfony\Component\Mailer\Bridge\AhaSend\Transport\AhaSendTransportFactory;
use Symfony\Component\Mailer\Bridge\Amazon\Transport\SesTransportFactory;
use Symfony\Component\Mailer\Bridge\Azure\Transport\AzureTransportFactory;
use Symfony\Component\Mailer\Bridge\Brevo\Transport\BrevoTransportFactory;
use Symfony\Component\Mailer\Bridge\Google\Transport\GmailTransportFactory;
use Symfony\Component\Mailer\Bridge\Infobip\Transport\InfobipTransportFactory;
use Symfony\Component\Mailer\Bridge\Mailchimp\Transport\MandrillTransportFactory;
use Symfony\Component\Mailer\Bridge\MailerSend\Transport\MailerSendTransportFactory;
use Symfony\Component\Mailer\Bridge\Mailgun\Transport\MailgunTransportFactory;
use Symfony\Component\Mailer\Bridge\Mailjet\Transport\MailjetTransportFactory;
use Symfony\Component\Mailer\Bridge\Mailomat\Transport\MailomatTransportFactory;
use Symfony\Component\Mailer\Bridge\MailPace\Transport\MailPaceTransportFactory;
use Symfony\Component\Mailer\Bridge\Mailtrap\Transport\MailtrapTransportFactory;
use Symfony\Component\Mailer\Bridge\Postal\Transport\PostalTransportFactory;
use Symfony\Component\Mailer\Bridge\Postmark\Transport\PostmarkTransportFactory;
use Symfony\Component\Mailer\Bridge\Resend\Transport\ResendTransportFactory;
use Symfony\Component\Mailer\Bridge\Scaleway\Transport\ScalewayTransportFactory;
use Symfony\Component\Mailer\Bridge\Sendgrid\Transport\SendgridTransportFactory;
use Symfony\Component\Mailer\Bridge\Sweego\Transport\SweegoTransportFactory;
use Symfony\Component\Mailer\Transport\AbstractTransportFactory;
use Symfony\Component\Mailer\Transport\NativeTransportFactory;
use Symfony\Component\Mailer\Transport\NullTransportFactory;
use Symfony\Component\Mailer\Transport\SendmailTransportFactory;
use Symfony\Component\Mailer\Transport\Smtp\EsmtpTransportFactory;
return static function (ContainerConfigurator $container) {
$container->services()
->set('mailer.transport_factory.abstract', AbstractTransportFactory::class)
->abstract()
->args([
service('event_dispatcher'),
service('http_client')->ignoreOnInvalid(),
service('logger')->ignoreOnInvalid(),
])
->tag('monolog.logger', ['channel' => 'mailer']);
$factories = [
'ahasend' => AhaSendTransportFactory::class,
'amazon' => SesTransportFactory::class,
'azure' => AzureTransportFactory::class,
'brevo' => BrevoTransportFactory::class,
'gmail' => GmailTransportFactory::class,
'infobip' => InfobipTransportFactory::class,
'mailchimp' => MandrillTransportFactory::class,
'mailersend' => MailerSendTransportFactory::class,
'mailgun' => MailgunTransportFactory::class,
'mailjet' => MailjetTransportFactory::class,
'mailomat' => MailomatTransportFactory::class,
'mailpace' => MailPaceTransportFactory::class,
'native' => NativeTransportFactory::class,
'null' => NullTransportFactory::class,
'postal' => PostalTransportFactory::class,
'postmark' => PostmarkTransportFactory::class,
'mailtrap' => MailtrapTransportFactory::class,
'resend' => ResendTransportFactory::class,
'scaleway' => ScalewayTransportFactory::class,
'sendgrid' => SendgridTransportFactory::class,
'sendmail' => SendmailTransportFactory::class,
'smtp' => EsmtpTransportFactory::class,
'sweego' => SweegoTransportFactory::class,
];
foreach ($factories as $name => $class) {
$container->services()
->set('mailer.transport_factory.'.$name, $class)
->parent('mailer.transport_factory.abstract')
->tag('mailer.transport_factory');
}
};

View File

@@ -0,0 +1,101 @@
<?php
/*
* This file is part of the Symfony package.
*
* (c) Fabien Potencier <fabien@symfony.com>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace Symfony\Component\DependencyInjection\Loader\Configurator;
use Symfony\Component\Mailer\Bridge\AhaSend\RemoteEvent\AhaSendPayloadConverter;
use Symfony\Component\Mailer\Bridge\AhaSend\Webhook\AhaSendRequestParser;
use Symfony\Component\Mailer\Bridge\Brevo\RemoteEvent\BrevoPayloadConverter;
use Symfony\Component\Mailer\Bridge\Brevo\Webhook\BrevoRequestParser;
use Symfony\Component\Mailer\Bridge\Mailchimp\RemoteEvent\MailchimpPayloadConverter;
use Symfony\Component\Mailer\Bridge\Mailchimp\Webhook\MailchimpRequestParser;
use Symfony\Component\Mailer\Bridge\MailerSend\RemoteEvent\MailerSendPayloadConverter;
use Symfony\Component\Mailer\Bridge\MailerSend\Webhook\MailerSendRequestParser;
use Symfony\Component\Mailer\Bridge\Mailgun\RemoteEvent\MailgunPayloadConverter;
use Symfony\Component\Mailer\Bridge\Mailgun\Webhook\MailgunRequestParser;
use Symfony\Component\Mailer\Bridge\Mailjet\RemoteEvent\MailjetPayloadConverter;
use Symfony\Component\Mailer\Bridge\Mailjet\Webhook\MailjetRequestParser;
use Symfony\Component\Mailer\Bridge\Mailomat\RemoteEvent\MailomatPayloadConverter;
use Symfony\Component\Mailer\Bridge\Mailomat\Webhook\MailomatRequestParser;
use Symfony\Component\Mailer\Bridge\Mailtrap\RemoteEvent\MailtrapPayloadConverter;
use Symfony\Component\Mailer\Bridge\Mailtrap\Webhook\MailtrapRequestParser;
use Symfony\Component\Mailer\Bridge\Postmark\RemoteEvent\PostmarkPayloadConverter;
use Symfony\Component\Mailer\Bridge\Postmark\Webhook\PostmarkRequestParser;
use Symfony\Component\Mailer\Bridge\Resend\RemoteEvent\ResendPayloadConverter;
use Symfony\Component\Mailer\Bridge\Resend\Webhook\ResendRequestParser;
use Symfony\Component\Mailer\Bridge\Sendgrid\RemoteEvent\SendgridPayloadConverter;
use Symfony\Component\Mailer\Bridge\Sendgrid\Webhook\SendgridRequestParser;
use Symfony\Component\Mailer\Bridge\Sweego\RemoteEvent\SweegoPayloadConverter;
use Symfony\Component\Mailer\Bridge\Sweego\Webhook\SweegoRequestParser;
return static function (ContainerConfigurator $container) {
$container->services()
->set('mailer.payload_converter.brevo', BrevoPayloadConverter::class)
->set('mailer.webhook.request_parser.brevo', BrevoRequestParser::class)
->args([service('mailer.payload_converter.brevo')])
->alias(BrevoRequestParser::class, 'mailer.webhook.request_parser.brevo')
->set('mailer.payload_converter.mailersend', MailerSendPayloadConverter::class)
->set('mailer.webhook.request_parser.mailersend', MailerSendRequestParser::class)
->args([service('mailer.payload_converter.mailersend')])
->alias(MailerSendRequestParser::class, 'mailer.webhook.request_parser.mailersend')
->set('mailer.payload_converter.mailgun', MailgunPayloadConverter::class)
->set('mailer.webhook.request_parser.mailgun', MailgunRequestParser::class)
->args([service('mailer.payload_converter.mailgun')])
->alias(MailgunRequestParser::class, 'mailer.webhook.request_parser.mailgun')
->set('mailer.payload_converter.mailjet', MailjetPayloadConverter::class)
->set('mailer.webhook.request_parser.mailjet', MailjetRequestParser::class)
->args([service('mailer.payload_converter.mailjet')])
->alias(MailjetRequestParser::class, 'mailer.webhook.request_parser.mailjet')
->set('mailer.payload_converter.mailomat', MailomatPayloadConverter::class)
->set('mailer.webhook.request_parser.mailomat', MailomatRequestParser::class)
->args([service('mailer.payload_converter.mailomat')])
->alias(MailomatRequestParser::class, 'mailer.webhook.request_parser.mailomat')
->set('mailer.payload_converter.postmark', PostmarkPayloadConverter::class)
->set('mailer.webhook.request_parser.postmark', PostmarkRequestParser::class)
->args([service('mailer.payload_converter.postmark')])
->alias(PostmarkRequestParser::class, 'mailer.webhook.request_parser.postmark')
->set('mailer.payload_converter.mailtrap', MailtrapPayloadConverter::class)
->set('mailer.webhook.request_parser.mailtrap', MailtrapRequestParser::class)
->args([service('mailer.payload_converter.mailtrap')])
->alias(MailtrapRequestParser::class, 'mailer.webhook.request_parser.mailtrap')
->set('mailer.payload_converter.resend', ResendPayloadConverter::class)
->set('mailer.webhook.request_parser.resend', ResendRequestParser::class)
->args([service('mailer.payload_converter.resend')])
->alias(ResendRequestParser::class, 'mailer.webhook.request_parser.resend')
->set('mailer.payload_converter.sendgrid', SendgridPayloadConverter::class)
->set('mailer.webhook.request_parser.sendgrid', SendgridRequestParser::class)
->args([service('mailer.payload_converter.sendgrid')])
->alias(SendgridRequestParser::class, 'mailer.webhook.request_parser.sendgrid')
->set('mailer.payload_converter.sweego', SweegoPayloadConverter::class)
->set('mailer.webhook.request_parser.sweego', SweegoRequestParser::class)
->args([service('mailer.payload_converter.sweego')])
->alias(SweegoRequestParser::class, 'mailer.webhook.request_parser.sweego')
->set('mailer.payload_converter.ahasend', AhaSendPayloadConverter::class)
->set('mailer.webhook.request_parser.ahasend', AhaSendRequestParser::class)
->args([service('mailer.payload_converter.ahasend')])
->alias(AhaSendRequestParser::class, 'mailer.webhook.request_parser.ahasend')
->set('mailer.payload_converter.mailchimp', MailchimpPayloadConverter::class)
->set('mailer.webhook.request_parser.mailchimp', MailchimpRequestParser::class)
->args([service('mailer.payload_converter.mailchimp')])
->alias(MailchimpRequestParser::class, 'mailer.webhook.request_parser.mailchimp')
;
};

View File

@@ -0,0 +1,237 @@
<?php
/*
* This file is part of the Symfony package.
*
* (c) Fabien Potencier <fabien@symfony.com>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace Symfony\Component\DependencyInjection\Loader\Configurator;
use Symfony\Component\DependencyInjection\ServiceLocator;
use Symfony\Component\Messenger\Bridge\AmazonSqs\Transport\AmazonSqsTransportFactory;
use Symfony\Component\Messenger\Bridge\Amqp\Transport\AmqpTransportFactory;
use Symfony\Component\Messenger\Bridge\Beanstalkd\Transport\BeanstalkdTransportFactory;
use Symfony\Component\Messenger\Bridge\Redis\Transport\RedisTransportFactory;
use Symfony\Component\Messenger\EventListener\AddErrorDetailsStampListener;
use Symfony\Component\Messenger\EventListener\DispatchPcntlSignalListener;
use Symfony\Component\Messenger\EventListener\ResetMemoryUsageListener;
use Symfony\Component\Messenger\EventListener\ResetServicesListener;
use Symfony\Component\Messenger\EventListener\SendFailedMessageForRetryListener;
use Symfony\Component\Messenger\EventListener\SendFailedMessageToFailureTransportListener;
use Symfony\Component\Messenger\EventListener\StopWorkerOnCustomStopExceptionListener;
use Symfony\Component\Messenger\EventListener\StopWorkerOnRestartSignalListener;
use Symfony\Component\Messenger\Handler\RedispatchMessageHandler;
use Symfony\Component\Messenger\Middleware\AddBusNameStampMiddleware;
use Symfony\Component\Messenger\Middleware\DeduplicateMiddleware;
use Symfony\Component\Messenger\Middleware\DispatchAfterCurrentBusMiddleware;
use Symfony\Component\Messenger\Middleware\FailedMessageProcessingMiddleware;
use Symfony\Component\Messenger\Middleware\HandleMessageMiddleware;
use Symfony\Component\Messenger\Middleware\RejectRedeliveredMessageMiddleware;
use Symfony\Component\Messenger\Middleware\RouterContextMiddleware;
use Symfony\Component\Messenger\Middleware\SendMessageMiddleware;
use Symfony\Component\Messenger\Middleware\TraceableMiddleware;
use Symfony\Component\Messenger\Middleware\ValidationMiddleware;
use Symfony\Component\Messenger\Retry\MultiplierRetryStrategy;
use Symfony\Component\Messenger\RoutableMessageBus;
use Symfony\Component\Messenger\Transport\InMemory\InMemoryTransportFactory;
use Symfony\Component\Messenger\Transport\Sender\SendersLocator;
use Symfony\Component\Messenger\Transport\Serialization\Normalizer\FlattenExceptionNormalizer;
use Symfony\Component\Messenger\Transport\Serialization\PhpSerializer;
use Symfony\Component\Messenger\Transport\Serialization\Serializer;
use Symfony\Component\Messenger\Transport\Serialization\SerializerInterface;
use Symfony\Component\Messenger\Transport\Sync\SyncTransportFactory;
use Symfony\Component\Messenger\Transport\TransportFactory;
return static function (ContainerConfigurator $container) {
$container->services()
->alias(SerializerInterface::class, 'messenger.default_serializer')
// Asynchronous
->set('messenger.senders_locator', SendersLocator::class)
->args([
abstract_arg('per message senders map'),
abstract_arg('senders service locator'),
])
->set('messenger.middleware.send_message', SendMessageMiddleware::class)
->abstract()
->args([
service('messenger.senders_locator'),
service('event_dispatcher'),
])
->call('setLogger', [service('logger')->ignoreOnInvalid()])
->tag('monolog.logger', ['channel' => 'messenger'])
// Message encoding/decoding
->set('messenger.transport.symfony_serializer', Serializer::class)
->args([
service('serializer'),
abstract_arg('format'),
abstract_arg('context'),
])
->set('serializer.normalizer.flatten_exception', FlattenExceptionNormalizer::class)
->tag('serializer.normalizer', ['built_in' => true, 'priority' => -880])
->set('messenger.transport.native_php_serializer', PhpSerializer::class)
->alias('messenger.default_serializer', 'messenger.transport.native_php_serializer')
// Middleware
->set('messenger.middleware.handle_message', HandleMessageMiddleware::class)
->abstract()
->args([
abstract_arg('bus handler resolver'),
])
->tag('monolog.logger', ['channel' => 'messenger'])
->call('setLogger', [service('logger')->ignoreOnInvalid()])
->set('messenger.middleware.deduplicate_middleware', DeduplicateMiddleware::class)
->args([
service('lock.factory'),
])
->set('messenger.middleware.add_bus_name_stamp_middleware', AddBusNameStampMiddleware::class)
->abstract()
->set('messenger.middleware.dispatch_after_current_bus', DispatchAfterCurrentBusMiddleware::class)
->set('messenger.middleware.validation', ValidationMiddleware::class)
->args([
service('validator'),
])
->set('messenger.middleware.reject_redelivered_message_middleware', RejectRedeliveredMessageMiddleware::class)
->set('messenger.middleware.failed_message_processing_middleware', FailedMessageProcessingMiddleware::class)
->set('messenger.middleware.traceable', TraceableMiddleware::class)
->abstract()
->args([
service('debug.stopwatch'),
])
->set('messenger.middleware.router_context', RouterContextMiddleware::class)
->args([
service('router'),
])
// Discovery
->set('messenger.receiver_locator', ServiceLocator::class)
->args([
[],
])
->tag('container.service_locator')
// Transports
->set('messenger.transport_factory', TransportFactory::class)
->args([
tagged_iterator('messenger.transport_factory'),
])
->set('messenger.transport.amqp.factory', AmqpTransportFactory::class)
->set('messenger.transport.redis.factory', RedisTransportFactory::class)
->set('messenger.transport.sync.factory', SyncTransportFactory::class)
->args([
service('messenger.routable_message_bus'),
])
->tag('messenger.transport_factory')
->set('messenger.transport.in_memory.factory', InMemoryTransportFactory::class)
->args([
service('clock')->nullOnInvalid(),
])
->tag('messenger.transport_factory')
->tag('kernel.reset', ['method' => 'reset'])
->set('messenger.transport.sqs.factory', AmazonSqsTransportFactory::class)
->args([
service('logger')->ignoreOnInvalid(),
])
->tag('monolog.logger', ['channel' => 'messenger'])
->set('messenger.transport.beanstalkd.factory', BeanstalkdTransportFactory::class)
// retry
->set('messenger.retry_strategy_locator', ServiceLocator::class)
->args([
[],
])
->tag('container.service_locator')
->set('messenger.retry.abstract_multiplier_retry_strategy', MultiplierRetryStrategy::class)
->abstract()
->args([
abstract_arg('max retries'),
abstract_arg('delay ms'),
abstract_arg('multiplier'),
abstract_arg('max delay ms'),
abstract_arg('jitter'),
])
// rate limiter
->set('messenger.rate_limiter_locator', ServiceLocator::class)
->args([[]])
->tag('container.service_locator')
// worker event listener
->set('messenger.retry.send_failed_message_for_retry_listener', SendFailedMessageForRetryListener::class)
->args([
abstract_arg('senders service locator'),
service('messenger.retry_strategy_locator'),
service('logger')->ignoreOnInvalid(),
service('event_dispatcher'),
])
->tag('kernel.event_subscriber')
->tag('monolog.logger', ['channel' => 'messenger'])
->set('messenger.failure.add_error_details_stamp_listener', AddErrorDetailsStampListener::class)
->tag('kernel.event_subscriber')
->set('messenger.failure.send_failed_message_to_failure_transport_listener', SendFailedMessageToFailureTransportListener::class)
->args([
abstract_arg('failure transports'),
service('logger')->ignoreOnInvalid(),
])
->tag('kernel.event_subscriber')
->tag('monolog.logger', ['channel' => 'messenger'])
->set('messenger.listener.dispatch_pcntl_signal_listener', DispatchPcntlSignalListener::class)
->tag('kernel.event_subscriber')
->set('messenger.listener.stop_worker_on_restart_signal_listener', StopWorkerOnRestartSignalListener::class)
->args([
service('cache.messenger.restart_workers_signal'),
service('logger')->ignoreOnInvalid(),
])
->tag('kernel.event_subscriber')
->tag('monolog.logger', ['channel' => 'messenger'])
->set('messenger.listener.stop_worker_on_stop_exception_listener', StopWorkerOnCustomStopExceptionListener::class)
->tag('kernel.event_subscriber')
->set('messenger.listener.reset_services', ResetServicesListener::class)
->args([
service('services_resetter'),
])
->set('messenger.listener.reset_memory_usage', ResetMemoryUsageListener::class)
->tag('kernel.event_subscriber')
->set('messenger.routable_message_bus', RoutableMessageBus::class)
->args([
abstract_arg('message bus locator'),
service('messenger.default_bus'),
])
->set('messenger.redispatch_message_handler', RedispatchMessageHandler::class)
->args([
service('messenger.default_bus'),
])
->tag('messenger.message_handler')
;
};

View File

@@ -0,0 +1,25 @@
<?php
/*
* This file is part of the Symfony package.
*
* (c) Fabien Potencier <fabien@symfony.com>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace Symfony\Component\DependencyInjection\Loader\Configurator;
use Symfony\Component\Messenger\DataCollector\MessengerDataCollector;
return static function (ContainerConfigurator $container) {
$container->services()
->set('data_collector.messenger', MessengerDataCollector::class)
->tag('data_collector', [
'template' => '@WebProfiler/Collector/messenger.html.twig',
'id' => 'messenger',
'priority' => 100,
])
;
};

View File

@@ -0,0 +1,26 @@
<?php
/*
* This file is part of the Symfony package.
*
* (c) Fabien Potencier <fabien@symfony.com>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace Symfony\Component\DependencyInjection\Loader\Configurator;
use Symfony\Component\Mime\MimeTypeGuesserInterface;
use Symfony\Component\Mime\MimeTypes;
use Symfony\Component\Mime\MimeTypesInterface;
return static function (ContainerConfigurator $container) {
$container->services()
->set('mime_types', MimeTypes::class)
->call('setDefault', [service('mime_types')])
->alias(MimeTypesInterface::class, 'mime_types')
->alias(MimeTypeGuesserInterface::class, 'mime_types')
;
};

View File

@@ -0,0 +1,151 @@
<?php
/*
* This file is part of the Symfony package.
*
* (c) Fabien Potencier <fabien@symfony.com>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace Symfony\Component\DependencyInjection\Loader\Configurator;
use Symfony\Bridge\Monolog\Handler\NotifierHandler;
use Symfony\Component\Notifier\Channel\BrowserChannel;
use Symfony\Component\Notifier\Channel\ChannelPolicy;
use Symfony\Component\Notifier\Channel\ChatChannel;
use Symfony\Component\Notifier\Channel\DesktopChannel;
use Symfony\Component\Notifier\Channel\EmailChannel;
use Symfony\Component\Notifier\Channel\PushChannel;
use Symfony\Component\Notifier\Channel\SmsChannel;
use Symfony\Component\Notifier\Chatter;
use Symfony\Component\Notifier\ChatterInterface;
use Symfony\Component\Notifier\EventListener\NotificationLoggerListener;
use Symfony\Component\Notifier\EventListener\SendFailedMessageToNotifierListener;
use Symfony\Component\Notifier\FlashMessage\DefaultFlashMessageImportanceMapper;
use Symfony\Component\Notifier\Message\ChatMessage;
use Symfony\Component\Notifier\Message\DesktopMessage;
use Symfony\Component\Notifier\Message\PushMessage;
use Symfony\Component\Notifier\Message\SmsMessage;
use Symfony\Component\Notifier\Messenger\MessageHandler;
use Symfony\Component\Notifier\Notifier;
use Symfony\Component\Notifier\NotifierInterface;
use Symfony\Component\Notifier\Texter;
use Symfony\Component\Notifier\TexterInterface;
use Symfony\Component\Notifier\Transport;
use Symfony\Component\Notifier\Transport\Transports;
return static function (ContainerConfigurator $container) {
$container->services()
->set('notifier', Notifier::class)
->args([tagged_locator('notifier.channel', 'channel'), service('notifier.channel_policy')->ignoreOnInvalid()])
->alias(NotifierInterface::class, 'notifier')
->set('notifier.channel_policy', ChannelPolicy::class)
->args([[]])
->set('notifier.flash_message_importance_mapper', DefaultFlashMessageImportanceMapper::class)
->args([[]])
->set('notifier.channel.browser', BrowserChannel::class)
->args([service('request_stack'), service('notifier.flash_message_importance_mapper')])
->tag('notifier.channel', ['channel' => 'browser'])
->set('notifier.channel.chat', ChatChannel::class)
->args([
service('chatter.transports'),
abstract_arg('message bus'),
])
->tag('notifier.channel', ['channel' => 'chat'])
->set('notifier.channel.sms', SmsChannel::class)
->args([
service('texter.transports'),
abstract_arg('message bus'),
])
->tag('notifier.channel', ['channel' => 'sms'])
->set('notifier.channel.email', EmailChannel::class)
->args([
service('mailer.transports'),
abstract_arg('message bus'),
])
->tag('notifier.channel', ['channel' => 'email'])
->set('notifier.channel.push', PushChannel::class)
->args([
service('texter.transports'),
abstract_arg('message bus'),
])
->tag('notifier.channel', ['channel' => 'push'])
->set('notifier.channel.desktop', DesktopChannel::class)
->args([
service('texter.transports'),
abstract_arg('message bus'),
])
->tag('notifier.channel', ['channel' => 'desktop'])
->set('notifier.monolog_handler', NotifierHandler::class)
->args([service('notifier')])
->set('notifier.failed_message_listener', SendFailedMessageToNotifierListener::class)
->args([service('notifier')])
->set('chatter', Chatter::class)
->args([
service('chatter.transports'),
abstract_arg('message bus'),
service('event_dispatcher')->ignoreOnInvalid(),
])
->alias(ChatterInterface::class, 'chatter')
->set('chatter.transports', Transports::class)
->factory([service('chatter.transport_factory'), 'fromStrings'])
->args([[]])
->set('chatter.transport_factory', Transport::class)
->args([tagged_iterator('chatter.transport_factory')])
->set('chatter.messenger.chat_handler', MessageHandler::class)
->args([service('chatter.transports')])
->tag('messenger.message_handler', ['handles' => ChatMessage::class])
->set('texter', Texter::class)
->args([
service('texter.transports'),
abstract_arg('message bus'),
service('event_dispatcher')->ignoreOnInvalid(),
])
->alias(TexterInterface::class, 'texter')
->set('texter.transports', Transports::class)
->factory([service('texter.transport_factory'), 'fromStrings'])
->args([[]])
->set('texter.transport_factory', Transport::class)
->args([tagged_iterator('texter.transport_factory')])
->set('texter.messenger.sms_handler', MessageHandler::class)
->args([service('texter.transports')])
->tag('messenger.message_handler', ['handles' => SmsMessage::class])
->set('texter.messenger.push_handler', MessageHandler::class)
->args([service('texter.transports')])
->tag('messenger.message_handler', ['handles' => PushMessage::class])
->set('notifier.notification_logger_listener', NotificationLoggerListener::class)
->tag('kernel.event_subscriber')
;
if (class_exists(DesktopMessage::class)) {
$container->services()
->set('texter.messenger.desktop_handler', MessageHandler::class)
->args([service('texter.transports')])
->tag('messenger.message_handler', ['handles' => DesktopMessage::class]);
}
};

View File

@@ -0,0 +1,22 @@
<?php
/*
* This file is part of the Symfony package.
*
* (c) Fabien Potencier <fabien@symfony.com>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace Symfony\Component\DependencyInjection\Loader\Configurator;
use Symfony\Component\Notifier\DataCollector\NotificationDataCollector;
return static function (ContainerConfigurator $container) {
$container->services()
->set('notifier.data_collector', NotificationDataCollector::class)
->args([service('notifier.notification_logger_listener')])
->tag('data_collector', ['template' => '@WebProfiler/Collector/notifier.html.twig', 'id' => 'notifier'])
;
};

View File

@@ -0,0 +1,140 @@
<?php
/*
* This file is part of the Symfony package.
*
* (c) Fabien Potencier <fabien@symfony.com>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace Symfony\Component\DependencyInjection\Loader\Configurator;
use Symfony\Component\Notifier\Bridge;
use Symfony\Component\Notifier\Transport\AbstractTransportFactory;
use Symfony\Component\Notifier\Transport\NullTransportFactory;
return static function (ContainerConfigurator $container) {
$container->services()
->set('notifier.transport_factory.abstract', AbstractTransportFactory::class)
->abstract()
->args([
service('event_dispatcher'),
service('http_client')->ignoreOnInvalid(),
]);
$chatterFactories = [
'bluesky' => Bridge\Bluesky\BlueskyTransportFactory::class,
'chatwork' => Bridge\Chatwork\ChatworkTransportFactory::class,
'discord' => Bridge\Discord\DiscordTransportFactory::class,
'fake-chat' => Bridge\FakeChat\FakeChatTransportFactory::class,
'firebase' => Bridge\Firebase\FirebaseTransportFactory::class,
'google-chat' => Bridge\GoogleChat\GoogleChatTransportFactory::class,
'line-bot' => Bridge\LineBot\LineBotTransportFactory::class,
'line-notify' => Bridge\LineNotify\LineNotifyTransportFactory::class,
'linked-in' => Bridge\LinkedIn\LinkedInTransportFactory::class,
'mastodon' => Bridge\Mastodon\MastodonTransportFactory::class,
'matrix' => Bridge\Matrix\MatrixTransportFactory::class,
'mattermost' => Bridge\Mattermost\MattermostTransportFactory::class,
'mercure' => Bridge\Mercure\MercureTransportFactory::class,
'microsoft-teams' => Bridge\MicrosoftTeams\MicrosoftTeamsTransportFactory::class,
'pager-duty' => Bridge\PagerDuty\PagerDutyTransportFactory::class,
'rocket-chat' => Bridge\RocketChat\RocketChatTransportFactory::class,
'slack' => Bridge\Slack\SlackTransportFactory::class,
'telegram' => Bridge\Telegram\TelegramTransportFactory::class,
'twitter' => Bridge\Twitter\TwitterTransportFactory::class,
'zendesk' => Bridge\Zendesk\ZendeskTransportFactory::class,
'zulip' => Bridge\Zulip\ZulipTransportFactory::class,
];
foreach ($chatterFactories as $name => $class) {
$container->services()
->set('notifier.transport_factory.'.$name, $class)
->parent('notifier.transport_factory.abstract')
->tag('chatter.transport_factory');
}
$texterFactories = [
'all-my-sms' => Bridge\AllMySms\AllMySmsTransportFactory::class,
'bandwidth' => Bridge\Bandwidth\BandwidthTransportFactory::class,
'brevo' => Bridge\Brevo\BrevoTransportFactory::class,
'click-send' => Bridge\ClickSend\ClickSendTransportFactory::class,
'clickatell' => Bridge\Clickatell\ClickatellTransportFactory::class,
'contact-everyone' => Bridge\ContactEveryone\ContactEveryoneTransportFactory::class,
'engagespot' => Bridge\Engagespot\EngagespotTransportFactory::class,
'esendex' => Bridge\Esendex\EsendexTransportFactory::class,
'expo' => Bridge\Expo\ExpoTransportFactory::class,
'fake-sms' => Bridge\FakeSms\FakeSmsTransportFactory::class,
'forty-six-elks' => Bridge\FortySixElks\FortySixElksTransportFactory::class,
'free-mobile' => Bridge\FreeMobile\FreeMobileTransportFactory::class,
'gateway-api' => Bridge\GatewayApi\GatewayApiTransportFactory::class,
'go-ip' => Bridge\GoIp\GoIpTransportFactory::class,
'infobip' => Bridge\Infobip\InfobipTransportFactory::class,
'iqsms' => Bridge\Iqsms\IqsmsTransportFactory::class,
'isendpro' => Bridge\Isendpro\IsendproTransportFactory::class,
'joli-notif' => Bridge\JoliNotif\JoliNotifTransportFactory::class,
'kaz-info-teh' => Bridge\KazInfoTeh\KazInfoTehTransportFactory::class,
'light-sms' => Bridge\LightSms\LightSmsTransportFactory::class,
'lox24' => Bridge\Lox24\Lox24TransportFactory::class,
'mailjet' => Bridge\Mailjet\MailjetTransportFactory::class,
'message-bird' => Bridge\MessageBird\MessageBirdTransportFactory::class,
'message-media' => Bridge\MessageMedia\MessageMediaTransportFactory::class,
'mobyt' => Bridge\Mobyt\MobytTransportFactory::class,
'novu' => Bridge\Novu\NovuTransportFactory::class,
'ntfy' => Bridge\Ntfy\NtfyTransportFactory::class,
'octopush' => Bridge\Octopush\OctopushTransportFactory::class,
'one-signal' => Bridge\OneSignal\OneSignalTransportFactory::class,
'orange-sms' => Bridge\OrangeSms\OrangeSmsTransportFactory::class,
'ovh-cloud' => Bridge\OvhCloud\OvhCloudTransportFactory::class,
'plivo' => Bridge\Plivo\PlivoTransportFactory::class,
'primotexto' => Bridge\Primotexto\PrimotextoTransportFactory::class,
'pushover' => Bridge\Pushover\PushoverTransportFactory::class,
'pushy' => Bridge\Pushy\PushyTransportFactory::class,
'redlink' => Bridge\Redlink\RedlinkTransportFactory::class,
'ring-central' => Bridge\RingCentral\RingCentralTransportFactory::class,
'sendberry' => Bridge\Sendberry\SendberryTransportFactory::class,
'sevenio' => Bridge\Sevenio\SevenIoTransportFactory::class,
'sipgate' => Bridge\Sipgate\SipgateTransportFactory::class,
'simple-textin' => Bridge\SimpleTextin\SimpleTextinTransportFactory::class,
'sinch' => Bridge\Sinch\SinchTransportFactory::class,
'sms-biuras' => Bridge\SmsBiuras\SmsBiurasTransportFactory::class,
'sms-factor' => Bridge\SmsFactor\SmsFactorTransportFactory::class,
'sms-sluzba' => Bridge\SmsSluzba\SmsSluzbaTransportFactory::class,
'sms77' => Bridge\Sms77\Sms77TransportFactory::class,
'smsapi' => Bridge\Smsapi\SmsapiTransportFactory::class,
'smsbox' => Bridge\Smsbox\SmsboxTransportFactory::class,
'smsc' => Bridge\Smsc\SmscTransportFactory::class,
'smsense' => Bridge\Smsense\SmsenseTransportFactory::class,
'smsmode' => Bridge\Smsmode\SmsmodeTransportFactory::class,
'spot-hit' => Bridge\SpotHit\SpotHitTransportFactory::class,
'sweego' => Bridge\Sweego\SweegoTransportFactory::class,
'telnyx' => Bridge\Telnyx\TelnyxTransportFactory::class,
'termii' => Bridge\Termii\TermiiTransportFactory::class,
'turbo-sms' => Bridge\TurboSms\TurboSmsTransportFactory::class,
'twilio' => Bridge\Twilio\TwilioTransportFactory::class,
'unifonic' => Bridge\Unifonic\UnifonicTransportFactory::class,
'vonage' => Bridge\Vonage\VonageTransportFactory::class,
'yunpian' => Bridge\Yunpian\YunpianTransportFactory::class,
];
foreach ($texterFactories as $name => $class) {
$container->services()
->set('notifier.transport_factory.'.$name, $class)
->parent('notifier.transport_factory.abstract')
->tag('texter.transport_factory');
}
$container->services()
->set('notifier.transport_factory.amazon-sns', Bridge\AmazonSns\AmazonSnsTransportFactory::class)
->parent('notifier.transport_factory.abstract')
->tag('texter.transport_factory')
->tag('chatter.transport_factory')
->set('notifier.transport_factory.null', NullTransportFactory::class)
->parent('notifier.transport_factory.abstract')
->tag('chatter.transport_factory')
->tag('texter.transport_factory')
;
};

View File

@@ -0,0 +1,33 @@
<?php
/*
* This file is part of the Symfony package.
*
* (c) Fabien Potencier <fabien@symfony.com>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace Symfony\Component\DependencyInjection\Loader\Configurator;
use Symfony\Component\Notifier\Bridge\Smsbox\Webhook\SmsboxRequestParser;
use Symfony\Component\Notifier\Bridge\Sweego\Webhook\SweegoRequestParser;
use Symfony\Component\Notifier\Bridge\Twilio\Webhook\TwilioRequestParser;
use Symfony\Component\Notifier\Bridge\Vonage\Webhook\VonageRequestParser;
return static function (ContainerConfigurator $container) {
$container->services()
->set('notifier.webhook.request_parser.smsbox', SmsboxRequestParser::class)
->alias(SmsboxRequestParser::class, 'notifier.webhook.request_parser.smsbox')
->set('notifier.webhook.request_parser.sweego', SweegoRequestParser::class)
->alias(SweegoRequestParser::class, 'notifier.webhook.request_parser.sweego')
->set('notifier.webhook.request_parser.twilio', TwilioRequestParser::class)
->alias(TwilioRequestParser::class, 'notifier.webhook.request_parser.twilio')
->set('notifier.webhook.request_parser.vonage', VonageRequestParser::class)
->alias(VonageRequestParser::class, 'notifier.webhook.request_parser.vonage')
;
};

View File

@@ -0,0 +1,33 @@
<?php
/*
* This file is part of the Symfony package.
*
* (c) Fabien Potencier <fabien@symfony.com>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace Symfony\Component\DependencyInjection\Loader\Configurator;
use Symfony\Component\ObjectMapper\Metadata\ObjectMapperMetadataFactoryInterface;
use Symfony\Component\ObjectMapper\Metadata\ReflectionObjectMapperMetadataFactory;
use Symfony\Component\ObjectMapper\ObjectMapper;
use Symfony\Component\ObjectMapper\ObjectMapperInterface;
return static function (ContainerConfigurator $container) {
$container->services()
->set('object_mapper.metadata_factory', ReflectionObjectMapperMetadataFactory::class)
->alias(ObjectMapperMetadataFactoryInterface::class, 'object_mapper.metadata_factory')
->set('object_mapper', ObjectMapper::class)
->args([
service('object_mapper.metadata_factory'),
service('property_accessor')->ignoreOnInvalid(),
tagged_locator('object_mapper.transform_callable'),
tagged_locator('object_mapper.condition_callable'),
])
->alias(ObjectMapperInterface::class, 'object_mapper')
;
};

View File

@@ -0,0 +1,22 @@
<?php
/*
* This file is part of the Symfony package.
*
* (c) Fabien Potencier <fabien@symfony.com>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace Symfony\Component\DependencyInjection\Loader\Configurator;
use Symfony\Component\Process\Messenger\RunProcessMessageHandler;
return static function (ContainerConfigurator $container) {
$container
->services()
->set('process.messenger.process_message_handler', RunProcessMessageHandler::class)
->tag('messenger.message_handler')
;
};

View File

@@ -0,0 +1,72 @@
<?php
/*
* This file is part of the Symfony package.
*
* (c) Fabien Potencier <fabien@symfony.com>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace Symfony\Component\DependencyInjection\Loader\Configurator;
use Symfony\Bundle\FrameworkBundle\EventListener\ConsoleProfilerListener;
use Symfony\Bundle\FrameworkBundle\FrameworkBundle;
use Symfony\Component\HttpKernel\Debug\VirtualRequestStack;
use Symfony\Component\HttpKernel\EventListener\ProfilerListener;
use Symfony\Component\HttpKernel\Profiler\FileProfilerStorage;
use Symfony\Component\HttpKernel\Profiler\Profiler;
use Symfony\Component\HttpKernel\Profiler\ProfilerStateChecker;
return static function (ContainerConfigurator $container) {
$container->services()
->set('profiler', Profiler::class)
->public()
->args([service('profiler.storage'), service('logger')->nullOnInvalid()])
->tag('monolog.logger', ['channel' => 'profiler'])
->tag('container.private', ['package' => 'symfony/framework-bundle', 'version' => '5.4'])
->set('profiler.storage', FileProfilerStorage::class)
->args([param('profiler.storage.dsn')])
->set('profiler_listener', ProfilerListener::class)
->args([
service('profiler'),
service('request_stack'),
null,
param('profiler_listener.only_exceptions'),
param('profiler_listener.only_main_requests'),
])
->tag('kernel.event_subscriber')
->set('console_profiler_listener', ConsoleProfilerListener::class)
->args([
service('.lazy_profiler'),
service('.virtual_request_stack'),
service('debug.stopwatch'),
param('kernel.runtime_mode.cli'),
service('router')->nullOnInvalid(),
])
->tag('kernel.event_subscriber')
->set('.lazy_profiler', Profiler::class)
->factory('current')
->args([[service('profiler')]])
->lazy()
->set('.virtual_request_stack', VirtualRequestStack::class)
->args([service('request_stack')])
->public()
->set('profiler.state_checker', ProfilerStateChecker::class)
->args([
service_locator(['profiler' => service('profiler')->ignoreOnUninitialized()]),
inline_service('bool')->factory([FrameworkBundle::class, 'considerProfilerEnabled']),
])
->set('profiler.is_disabled_state_checker', 'Closure')
->factory(['Closure', 'fromCallable'])
->args([[service('profiler.state_checker'), 'isProfilerDisabled']])
;
};

View File

@@ -0,0 +1,32 @@
<?php
/*
* This file is part of the Symfony package.
*
* (c) Fabien Potencier <fabien@symfony.com>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace Symfony\Component\DependencyInjection\Loader\Configurator;
use Symfony\Component\PropertyAccess\PropertyAccessor;
use Symfony\Component\PropertyAccess\PropertyAccessorInterface;
use Symfony\Component\PropertyInfo\PropertyReadInfoExtractorInterface;
use Symfony\Component\PropertyInfo\PropertyWriteInfoExtractorInterface;
return static function (ContainerConfigurator $container) {
$container->services()
->set('property_accessor', PropertyAccessor::class)
->args([
abstract_arg('magic methods allowed, set by the extension'),
abstract_arg('throw exceptions, set by the extension'),
service('cache.property_access')->ignoreOnInvalid(),
service(PropertyReadInfoExtractorInterface::class)->nullOnInvalid(),
service(PropertyWriteInfoExtractorInterface::class)->nullOnInvalid(),
])
->alias(PropertyAccessorInterface::class, 'property_accessor')
;
};

View File

@@ -0,0 +1,58 @@
<?php
/*
* This file is part of the Symfony package.
*
* (c) Fabien Potencier <fabien@symfony.com>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace Symfony\Component\DependencyInjection\Loader\Configurator;
use Symfony\Component\PropertyInfo\Extractor\ConstructorExtractor;
use Symfony\Component\PropertyInfo\Extractor\ReflectionExtractor;
use Symfony\Component\PropertyInfo\PropertyAccessExtractorInterface;
use Symfony\Component\PropertyInfo\PropertyDescriptionExtractorInterface;
use Symfony\Component\PropertyInfo\PropertyInfoCacheExtractor;
use Symfony\Component\PropertyInfo\PropertyInfoExtractor;
use Symfony\Component\PropertyInfo\PropertyInfoExtractorInterface;
use Symfony\Component\PropertyInfo\PropertyInitializableExtractorInterface;
use Symfony\Component\PropertyInfo\PropertyListExtractorInterface;
use Symfony\Component\PropertyInfo\PropertyReadInfoExtractorInterface;
use Symfony\Component\PropertyInfo\PropertyTypeExtractorInterface;
use Symfony\Component\PropertyInfo\PropertyWriteInfoExtractorInterface;
return static function (ContainerConfigurator $container) {
$container->services()
->set('property_info', PropertyInfoExtractor::class)
->args([[], [], [], [], []])
->alias(PropertyAccessExtractorInterface::class, 'property_info')
->alias(PropertyDescriptionExtractorInterface::class, 'property_info')
->alias(PropertyInfoExtractorInterface::class, 'property_info')
->alias(PropertyTypeExtractorInterface::class, 'property_info')
->alias(PropertyListExtractorInterface::class, 'property_info')
->alias(PropertyInitializableExtractorInterface::class, 'property_info')
->set('property_info.cache', PropertyInfoCacheExtractor::class)
->decorate('property_info')
->args([service('property_info.cache.inner'), service('cache.property_info')])
// Extractor
->set('property_info.reflection_extractor', ReflectionExtractor::class)
->tag('property_info.list_extractor', ['priority' => -1000])
->tag('property_info.type_extractor', ['priority' => -1002])
->tag('property_info.constructor_extractor', ['priority' => -1002])
->tag('property_info.access_extractor', ['priority' => -1000])
->tag('property_info.initializable_extractor', ['priority' => -1000])
->alias(PropertyReadInfoExtractorInterface::class, 'property_info.reflection_extractor')
->alias(PropertyWriteInfoExtractorInterface::class, 'property_info.reflection_extractor')
->set('property_info.constructor_extractor', ConstructorExtractor::class)
->args([[]])
->tag('property_info.type_extractor', ['priority' => -999])
;
};

View File

@@ -0,0 +1,30 @@
<?php
/*
* This file is part of the Symfony package.
*
* (c) Fabien Potencier <fabien@symfony.com>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace Symfony\Component\DependencyInjection\Loader\Configurator;
use Symfony\Component\RateLimiter\RateLimiterFactory;
return static function (ContainerConfigurator $container) {
$container->services()
->set('cache.rate_limiter')
->parent('cache.app')
->tag('cache.pool')
->set('limiter', RateLimiterFactory::class)
->abstract()
->args([
abstract_arg('config'),
abstract_arg('storage'),
null,
])
;
};

View File

@@ -0,0 +1,24 @@
<?php
/*
* This file is part of the Symfony package.
*
* (c) Fabien Potencier <fabien@symfony.com>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace Symfony\Component\DependencyInjection\Loader\Configurator;
use Symfony\Component\RemoteEvent\Messenger\ConsumeRemoteEventHandler;
return static function (ContainerConfigurator $container) {
$container->services()
->set('remote_event.messenger.handler', ConsumeRemoteEventHandler::class)
->args([
tagged_locator('remote_event.consumer', 'consumer'),
])
->tag('messenger.message_handler')
;
};

View File

@@ -0,0 +1,22 @@
<?php
/*
* This file is part of the Symfony package.
*
* (c) Fabien Potencier <fabien@symfony.com>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace Symfony\Component\DependencyInjection\Loader\Configurator;
use Symfony\Component\HttpKernel\EventListener\AddRequestFormatsListener;
return static function (ContainerConfigurator $container) {
$container->services()
->set('request.add_request_formats_listener', AddRequestFormatsListener::class)
->args([abstract_arg('formats')])
->tag('kernel.event_subscriber')
;
};

View File

@@ -0,0 +1,212 @@
<?php
/*
* This file is part of the Symfony package.
*
* (c) Fabien Potencier <fabien@symfony.com>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace Symfony\Component\DependencyInjection\Loader\Configurator;
use Psr\Container\ContainerInterface;
use Symfony\Bundle\FrameworkBundle\CacheWarmer\RouterCacheWarmer;
use Symfony\Bundle\FrameworkBundle\Controller\RedirectController;
use Symfony\Bundle\FrameworkBundle\Controller\TemplateController;
use Symfony\Bundle\FrameworkBundle\Routing\AttributeRouteControllerLoader;
use Symfony\Bundle\FrameworkBundle\Routing\DelegatingLoader;
use Symfony\Bundle\FrameworkBundle\Routing\RedirectableCompiledUrlMatcher;
use Symfony\Bundle\FrameworkBundle\Routing\Router;
use Symfony\Component\Config\Loader\LoaderResolver;
use Symfony\Component\HttpKernel\EventListener\RouterListener;
use Symfony\Component\Routing\Generator\CompiledUrlGenerator;
use Symfony\Component\Routing\Generator\Dumper\CompiledUrlGeneratorDumper;
use Symfony\Component\Routing\Generator\UrlGeneratorInterface;
use Symfony\Component\Routing\Loader\AttributeDirectoryLoader;
use Symfony\Component\Routing\Loader\AttributeFileLoader;
use Symfony\Component\Routing\Loader\ContainerLoader;
use Symfony\Component\Routing\Loader\DirectoryLoader;
use Symfony\Component\Routing\Loader\GlobFileLoader;
use Symfony\Component\Routing\Loader\PhpFileLoader;
use Symfony\Component\Routing\Loader\Psr4DirectoryLoader;
use Symfony\Component\Routing\Loader\XmlFileLoader;
use Symfony\Component\Routing\Loader\YamlFileLoader;
use Symfony\Component\Routing\Matcher\Dumper\CompiledUrlMatcherDumper;
use Symfony\Component\Routing\Matcher\ExpressionLanguageProvider;
use Symfony\Component\Routing\Matcher\UrlMatcherInterface;
use Symfony\Component\Routing\RequestContext;
use Symfony\Component\Routing\RequestContextAwareInterface;
use Symfony\Component\Routing\RouterInterface;
return static function (ContainerConfigurator $container) {
$container->parameters()
->set('router.request_context.host', 'localhost')
->set('router.request_context.scheme', 'http')
->set('router.request_context.base_url', '')
;
$container->services()
->set('routing.resolver', LoaderResolver::class)
->set('routing.loader.xml', XmlFileLoader::class)
->args([
service('file_locator'),
'%kernel.environment%',
])
->tag('routing.loader')
->set('routing.loader.yml', YamlFileLoader::class)
->args([
service('file_locator'),
'%kernel.environment%',
])
->tag('routing.loader')
->set('routing.loader.php', PhpFileLoader::class)
->args([
service('file_locator'),
'%kernel.environment%',
])
->tag('routing.loader')
->set('routing.loader.glob', GlobFileLoader::class)
->args([
service('file_locator'),
'%kernel.environment%',
])
->tag('routing.loader')
->set('routing.loader.directory', DirectoryLoader::class)
->args([
service('file_locator'),
'%kernel.environment%',
])
->tag('routing.loader')
->set('routing.loader.container', ContainerLoader::class)
->args([
tagged_locator('routing.route_loader'),
'%kernel.environment%',
])
->tag('routing.loader')
->set('routing.loader.attribute', AttributeRouteControllerLoader::class)
->args([
'%kernel.environment%',
])
->tag('routing.loader', ['priority' => -10])
->set('routing.loader.attribute.directory', AttributeDirectoryLoader::class)
->args([
service('file_locator'),
service('routing.loader.attribute'),
])
->tag('routing.loader', ['priority' => -10])
->set('routing.loader.attribute.file', AttributeFileLoader::class)
->args([
service('file_locator'),
service('routing.loader.attribute'),
])
->tag('routing.loader', ['priority' => -10])
->set('routing.loader.psr4', Psr4DirectoryLoader::class)
->args([
service('file_locator'),
])
->tag('routing.loader', ['priority' => -10])
->set('routing.loader', DelegatingLoader::class)
->public()
->args([
service('routing.resolver'),
[], // Default options
[], // Default requirements
])
->set('router.default', Router::class)
->args([
service(ContainerInterface::class),
param('router.resource'),
[
'cache_dir' => param('router.cache_dir'),
'debug' => param('kernel.debug'),
'generator_class' => CompiledUrlGenerator::class,
'generator_dumper_class' => CompiledUrlGeneratorDumper::class,
'matcher_class' => RedirectableCompiledUrlMatcher::class,
'matcher_dumper_class' => CompiledUrlMatcherDumper::class,
],
service('router.request_context')->ignoreOnInvalid(),
service('parameter_bag')->ignoreOnInvalid(),
service('logger')->ignoreOnInvalid(),
param('kernel.default_locale'),
])
->call('setConfigCacheFactory', [
service('config_cache_factory'),
])
->tag('monolog.logger', ['channel' => 'router'])
->tag('container.service_subscriber', ['id' => 'routing.loader'])
->alias('router', 'router.default')
->public()
->alias(RouterInterface::class, 'router')
->alias(UrlGeneratorInterface::class, 'router')
->alias(UrlMatcherInterface::class, 'router')
->alias(RequestContextAwareInterface::class, 'router')
->set('router.request_context', RequestContext::class)
->factory([RequestContext::class, 'fromUri'])
->args([
param('router.request_context.base_url'),
param('router.request_context.host'),
param('router.request_context.scheme'),
param('request_listener.http_port'),
param('request_listener.https_port'),
])
->call('setParameter', [
'_functions',
service('router.expression_language_provider')->ignoreOnInvalid(),
])
->alias(RequestContext::class, 'router.request_context')
->set('router.expression_language_provider', ExpressionLanguageProvider::class)
->args([
tagged_locator('routing.expression_language_function', 'function'),
])
->tag('routing.expression_language_provider')
->set('router.cache_warmer', RouterCacheWarmer::class)
->args([service(ContainerInterface::class)])
->tag('container.service_subscriber', ['id' => 'router'])
->tag('kernel.cache_warmer')
->set('router_listener', RouterListener::class)
->args([
service('router'),
service('request_stack'),
service('router.request_context')->ignoreOnInvalid(),
service('logger')->ignoreOnInvalid(),
param('kernel.project_dir'),
param('kernel.debug'),
])
->tag('kernel.event_subscriber')
->tag('monolog.logger', ['channel' => 'request'])
->set(RedirectController::class)
->public()
->args([
service('router'),
inline_service('int')
->factory([service('router.request_context'), 'getHttpPort']),
inline_service('int')
->factory([service('router.request_context'), 'getHttpsPort']),
])
->set(TemplateController::class)
->args([
service('twig')->ignoreOnInvalid(),
])
->public()
;
};

View File

@@ -0,0 +1,31 @@
<?php
/*
* This file is part of the Symfony package.
*
* (c) Fabien Potencier <fabien@symfony.com>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
use Symfony\Component\Routing\Loader\Configurator\RoutingConfigurator;
use Symfony\Component\Routing\Loader\XmlFileLoader;
return function (RoutingConfigurator $routes): void {
foreach (debug_backtrace() as $trace) {
if (isset($trace['object']) && $trace['object'] instanceof XmlFileLoader && 'doImport' === $trace['function']) {
if (__DIR__ === dirname(realpath($trace['args'][3]))) {
trigger_deprecation('symfony/routing', '7.3', 'The "errors.xml" routing configuration file is deprecated, import "errors.php" instead.');
break;
}
}
}
$routes->add('_preview_error', '/{code}.{_format}')
->controller('error_controller::preview')
->defaults(['_format' => 'html'])
->requirements(['code' => '\d+'])
;
};

View File

@@ -0,0 +1,8 @@
<?xml version="1.0" encoding="UTF-8" ?>
<routes xmlns="http://symfony.com/schema/routing"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://symfony.com/schema/routing https://symfony.com/schema/routing/routing-1.0.xsd">
<import resource="errors.php" type="php" />
</routes>

View File

@@ -0,0 +1,30 @@
<?php
/*
* This file is part of the Symfony package.
*
* (c) Fabien Potencier <fabien@symfony.com>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
use Symfony\Component\Routing\Loader\Configurator\RoutingConfigurator;
use Symfony\Component\Routing\Loader\XmlFileLoader;
return function (RoutingConfigurator $routes): void {
foreach (debug_backtrace() as $trace) {
if (isset($trace['object']) && $trace['object'] instanceof XmlFileLoader && 'doImport' === $trace['function']) {
if (__DIR__ === dirname(realpath($trace['args'][3]))) {
trigger_deprecation('symfony/routing', '7.3', 'The "webhook.xml" routing configuration file is deprecated, import "webhook.php" instead.');
break;
}
}
}
$routes->add('_webhook_controller', '/{type}')
->controller('webhook.controller::handle')
->requirements(['type' => '.+'])
;
};

View File

@@ -0,0 +1,8 @@
<?xml version="1.0" encoding="UTF-8" ?>
<routes xmlns="http://symfony.com/schema/routing"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://symfony.com/schema/routing https://symfony.com/schema/routing/routing-1.0.xsd">
<import resource="webhook.php" type="php" />
</routes>

View File

@@ -0,0 +1,41 @@
<?php
/*
* This file is part of the Symfony package.
*
* (c) Fabien Potencier <fabien@symfony.com>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace Symfony\Component\DependencyInjection\Loader\Configurator;
use Symfony\Component\Scheduler\EventListener\DispatchSchedulerEventListener;
use Symfony\Component\Scheduler\Messenger\SchedulerTransportFactory;
use Symfony\Component\Scheduler\Messenger\Serializer\Normalizer\SchedulerTriggerNormalizer;
use Symfony\Component\Scheduler\Messenger\ServiceCallMessageHandler;
return static function (ContainerConfigurator $container) {
$container->services()
->set('scheduler.messenger.service_call_message_handler', ServiceCallMessageHandler::class)
->args([
tagged_locator('scheduler.task'),
])
->tag('messenger.message_handler')
->set('scheduler.messenger_transport_factory', SchedulerTransportFactory::class)
->args([
tagged_locator('scheduler.schedule_provider', 'name'),
service('clock'),
])
->tag('messenger.transport_factory')
->set('scheduler.event_listener', DispatchSchedulerEventListener::class)
->args([
tagged_locator('scheduler.schedule_provider', 'name'),
service('event_dispatcher'),
])
->tag('kernel.event_subscriber')
->set('serializer.normalizer.scheduler_trigger', SchedulerTriggerNormalizer::class)
->tag('serializer.normalizer', ['built_in' => true, 'priority' => -880])
;
};

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,38 @@
<?php
/*
* This file is part of the Symfony package.
*
* (c) Fabien Potencier <fabien@symfony.com>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace Symfony\Component\DependencyInjection\Loader\Configurator;
use Symfony\Bundle\FrameworkBundle\Secrets\DotenvVault;
use Symfony\Bundle\FrameworkBundle\Secrets\SodiumVault;
use Symfony\Component\DependencyInjection\StaticEnvVarLoader;
return static function (ContainerConfigurator $container) {
$container->services()
->set('secrets.vault', SodiumVault::class)
->args([
abstract_arg('Secret dir, set in FrameworkExtension'),
service('secrets.decryption_key')->ignoreOnInvalid(),
abstract_arg('Secret env var, set in FrameworkExtension'),
])
->set('secrets.env_var_loader', StaticEnvVarLoader::class)
->args([service('secrets.vault')])
->tag('container.env_var_loader')
->set('secrets.decryption_key')
->parent('container.env')
->args([abstract_arg('Decryption env var, set in FrameworkExtension')])
->set('secrets.local_vault', DotenvVault::class)
->args([abstract_arg('.env file path, set in FrameworkExtension')])
;
};

View File

@@ -0,0 +1,64 @@
<?php
/*
* This file is part of the Symfony package.
*
* (c) Fabien Potencier <fabien@symfony.com>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace Symfony\Component\DependencyInjection\Loader\Configurator;
use Symfony\Bridge\Twig\Extension\CsrfExtension;
use Symfony\Bridge\Twig\Extension\CsrfRuntime;
use Symfony\Component\Security\Csrf\CsrfTokenManager;
use Symfony\Component\Security\Csrf\CsrfTokenManagerInterface;
use Symfony\Component\Security\Csrf\SameOriginCsrfTokenManager;
use Symfony\Component\Security\Csrf\TokenGenerator\TokenGeneratorInterface;
use Symfony\Component\Security\Csrf\TokenGenerator\UriSafeTokenGenerator;
use Symfony\Component\Security\Csrf\TokenStorage\SessionTokenStorage;
use Symfony\Component\Security\Csrf\TokenStorage\TokenStorageInterface;
return static function (ContainerConfigurator $container) {
$container->services()
->set('security.csrf.token_generator', UriSafeTokenGenerator::class)
->alias(TokenGeneratorInterface::class, 'security.csrf.token_generator')
->set('security.csrf.token_storage', SessionTokenStorage::class)
->args([service('request_stack')])
->alias(TokenStorageInterface::class, 'security.csrf.token_storage')
->set('security.csrf.token_manager', CsrfTokenManager::class)
->args([
service('security.csrf.token_generator'),
service('security.csrf.token_storage'),
service('request_stack')->ignoreOnInvalid(),
])
->alias(CsrfTokenManagerInterface::class, 'security.csrf.token_manager')
->set('twig.runtime.security_csrf', CsrfRuntime::class)
->args([service('security.csrf.token_manager')])
->tag('twig.runtime')
->set('twig.extension.security_csrf', CsrfExtension::class)
->tag('twig.extension')
->set('security.csrf.same_origin_token_manager', SameOriginCsrfTokenManager::class)
->decorate('security.csrf.token_manager')
->args([
service('request_stack'),
service('logger')->nullOnInvalid(),
service('.inner'),
abstract_arg('framework.csrf_protection.stateless_token_ids'),
abstract_arg('framework.csrf_protection.check_header'),
abstract_arg('framework.csrf_protection.cookie_name'),
])
->tag('monolog.logger', ['channel' => 'request'])
->tag('kernel.event_listener', ['event' => 'kernel.response', 'method' => 'onKernelResponse'])
;
};

View File

@@ -0,0 +1,23 @@
<?php
/*
* This file is part of the Symfony package.
*
* (c) Fabien Potencier <fabien@symfony.com>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace Symfony\Component\DependencyInjection\Loader\Configurator;
use Symfony\Component\Semaphore\SemaphoreFactory;
return static function (ContainerConfigurator $container) {
$container->services()
->set('semaphore.factory.abstract', SemaphoreFactory::class)->abstract()
->args([abstract_arg('Store')])
->call('setLogger', [service('logger')->ignoreOnInvalid()])
->tag('monolog.logger', ['channel' => 'semaphore'])
;
};

View File

@@ -0,0 +1,229 @@
<?php
/*
* This file is part of the Symfony package.
*
* (c) Fabien Potencier <fabien@symfony.com>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace Symfony\Component\DependencyInjection\Loader\Configurator;
use Psr\Cache\CacheItemPoolInterface;
use Symfony\Bundle\FrameworkBundle\CacheWarmer\SerializerCacheWarmer;
use Symfony\Component\Cache\Adapter\PhpArrayAdapter;
use Symfony\Component\ErrorHandler\ErrorRenderer\HtmlErrorRenderer;
use Symfony\Component\ErrorHandler\ErrorRenderer\SerializerErrorRenderer;
use Symfony\Component\PropertyInfo\Extractor\SerializerExtractor;
use Symfony\Component\Serializer\Encoder\CsvEncoder;
use Symfony\Component\Serializer\Encoder\DecoderInterface;
use Symfony\Component\Serializer\Encoder\EncoderInterface;
use Symfony\Component\Serializer\Encoder\JsonEncoder;
use Symfony\Component\Serializer\Encoder\XmlEncoder;
use Symfony\Component\Serializer\Encoder\YamlEncoder;
use Symfony\Component\Serializer\Mapping\ClassDiscriminatorFromClassMetadata;
use Symfony\Component\Serializer\Mapping\ClassDiscriminatorResolverInterface;
use Symfony\Component\Serializer\Mapping\Factory\CacheClassMetadataFactory;
use Symfony\Component\Serializer\Mapping\Factory\ClassMetadataFactory;
use Symfony\Component\Serializer\Mapping\Factory\ClassMetadataFactoryInterface;
use Symfony\Component\Serializer\Mapping\Loader\LoaderChain;
use Symfony\Component\Serializer\NameConverter\CamelCaseToSnakeCaseNameConverter;
use Symfony\Component\Serializer\NameConverter\MetadataAwareNameConverter;
use Symfony\Component\Serializer\NameConverter\SnakeCaseToCamelCaseNameConverter;
use Symfony\Component\Serializer\Normalizer\ArrayDenormalizer;
use Symfony\Component\Serializer\Normalizer\BackedEnumNormalizer;
use Symfony\Component\Serializer\Normalizer\ConstraintViolationListNormalizer;
use Symfony\Component\Serializer\Normalizer\DataUriNormalizer;
use Symfony\Component\Serializer\Normalizer\DateIntervalNormalizer;
use Symfony\Component\Serializer\Normalizer\DateTimeNormalizer;
use Symfony\Component\Serializer\Normalizer\DateTimeZoneNormalizer;
use Symfony\Component\Serializer\Normalizer\DenormalizerInterface;
use Symfony\Component\Serializer\Normalizer\FormErrorNormalizer;
use Symfony\Component\Serializer\Normalizer\JsonSerializableNormalizer;
use Symfony\Component\Serializer\Normalizer\MimeMessageNormalizer;
use Symfony\Component\Serializer\Normalizer\NormalizerInterface;
use Symfony\Component\Serializer\Normalizer\NumberNormalizer;
use Symfony\Component\Serializer\Normalizer\ObjectNormalizer;
use Symfony\Component\Serializer\Normalizer\ProblemNormalizer;
use Symfony\Component\Serializer\Normalizer\PropertyNormalizer;
use Symfony\Component\Serializer\Normalizer\TranslatableNormalizer;
use Symfony\Component\Serializer\Normalizer\UidNormalizer;
use Symfony\Component\Serializer\Normalizer\UnwrappingDenormalizer;
use Symfony\Component\Serializer\Serializer;
use Symfony\Component\Serializer\SerializerInterface;
return static function (ContainerConfigurator $container) {
$container->parameters()
->set('serializer.mapping.cache.file', '%kernel.build_dir%/serialization.php')
;
$container->services()
->set('serializer', Serializer::class)
->args([[], [], []])
->alias(SerializerInterface::class, 'serializer')
->alias(NormalizerInterface::class, 'serializer')
->alias(DenormalizerInterface::class, 'serializer')
->alias(EncoderInterface::class, 'serializer')
->alias(DecoderInterface::class, 'serializer')
->alias('serializer.property_accessor', 'property_accessor')
// Discriminator Map
->set('serializer.mapping.class_discriminator_resolver', ClassDiscriminatorFromClassMetadata::class)
->args([service('serializer.mapping.class_metadata_factory')])
->alias(ClassDiscriminatorResolverInterface::class, 'serializer.mapping.class_discriminator_resolver')
// Normalizer
->set('serializer.normalizer.constraint_violation_list', ConstraintViolationListNormalizer::class)
->args([1 => service('serializer.name_converter.metadata_aware')])
->autowire(true)
->tag('serializer.normalizer', ['built_in' => true, 'priority' => -915])
->set('serializer.normalizer.mime_message', MimeMessageNormalizer::class)
->args([service('serializer.normalizer.property')])
->tag('serializer.normalizer', ['built_in' => true, 'priority' => -915])
->set('serializer.normalizer.datetimezone', DateTimeZoneNormalizer::class)
->tag('serializer.normalizer', ['built_in' => true, 'priority' => -915])
->set('serializer.normalizer.dateinterval', DateIntervalNormalizer::class)
->tag('serializer.normalizer', ['built_in' => true, 'priority' => -915])
->set('serializer.normalizer.data_uri', DataUriNormalizer::class)
->args([service('mime_types')->nullOnInvalid()])
->tag('serializer.normalizer', ['built_in' => true, 'priority' => -920])
->set('serializer.normalizer.datetime', DateTimeNormalizer::class)
->tag('serializer.normalizer', ['built_in' => true, 'priority' => -910])
->set('serializer.normalizer.json_serializable', JsonSerializableNormalizer::class)
->args([null, null])
->tag('serializer.normalizer', ['built_in' => true, 'priority' => -950])
->set('serializer.normalizer.problem', ProblemNormalizer::class)
->args([param('kernel.debug'), '$translator' => service('translator')->nullOnInvalid()])
->tag('serializer.normalizer', ['built_in' => true, 'priority' => -890])
->set('serializer.denormalizer.unwrapping', UnwrappingDenormalizer::class)
->args([service('serializer.property_accessor')])
->tag('serializer.normalizer', ['built_in' => true, 'priority' => 1000])
->set('serializer.normalizer.uid', UidNormalizer::class)
->tag('serializer.normalizer', ['built_in' => true, 'priority' => -890])
->set('serializer.normalizer.translatable', TranslatableNormalizer::class)
->args(['$translator' => service('translator')])
->tag('serializer.normalizer', ['built_in' => true, 'priority' => -920])
->set('serializer.normalizer.form_error', FormErrorNormalizer::class)
->tag('serializer.normalizer', ['built_in' => true, 'priority' => -915])
->set('serializer.normalizer.object', ObjectNormalizer::class)
->args([
service('serializer.mapping.class_metadata_factory'),
service('serializer.name_converter.metadata_aware'),
service('serializer.property_accessor'),
service('property_info')->ignoreOnInvalid(),
service('serializer.mapping.class_discriminator_resolver')->ignoreOnInvalid(),
null,
abstract_arg('default context, set in the SerializerPass'),
service('property_info')->ignoreOnInvalid(),
])
->tag('serializer.normalizer', ['built_in' => true, 'priority' => -1000])
->set('serializer.normalizer.property', PropertyNormalizer::class)
->args([
service('serializer.mapping.class_metadata_factory'),
service('serializer.name_converter.metadata_aware'),
service('property_info')->ignoreOnInvalid(),
service('serializer.mapping.class_discriminator_resolver')->ignoreOnInvalid(),
null,
])
->set('serializer.denormalizer.array', ArrayDenormalizer::class)
->tag('serializer.normalizer', ['built_in' => true, 'priority' => -990])
// Loader
->set('serializer.mapping.chain_loader', LoaderChain::class)
->args([[]])
// Class Metadata Factory
->set('serializer.mapping.class_metadata_factory', ClassMetadataFactory::class)
->args([service('serializer.mapping.chain_loader')])
->alias(ClassMetadataFactoryInterface::class, 'serializer.mapping.class_metadata_factory')
// Cache
->set('serializer.mapping.cache_warmer', SerializerCacheWarmer::class)
->args([abstract_arg('The serializer metadata loaders'), param('serializer.mapping.cache.file')])
->tag('kernel.cache_warmer')
->set('serializer.mapping.cache.symfony', CacheItemPoolInterface::class)
->factory([PhpArrayAdapter::class, 'create'])
->args([param('serializer.mapping.cache.file'), service('cache.serializer')])
->set('serializer.mapping.cache_class_metadata_factory', CacheClassMetadataFactory::class)
->decorate('serializer.mapping.class_metadata_factory')
->args([
service('serializer.mapping.cache_class_metadata_factory.inner'),
service('serializer.mapping.cache.symfony'),
])
// Encoders
->set('serializer.encoder.xml', XmlEncoder::class)
->tag('serializer.encoder', ['built_in' => true])
->set('serializer.encoder.json', JsonEncoder::class)
->args([null, null])
->tag('serializer.encoder', ['built_in' => true])
->set('serializer.encoder.yaml', YamlEncoder::class)
->args([null, null])
->tag('serializer.encoder', ['built_in' => true])
->set('serializer.encoder.csv', CsvEncoder::class)
->tag('serializer.encoder', ['built_in' => true])
// Name converters
->set('serializer.name_converter.camel_case_to_snake_case', CamelCaseToSnakeCaseNameConverter::class)
->set('serializer.name_converter.snake_case_to_camel_case', SnakeCaseToCamelCaseNameConverter::class)
->set('serializer.name_converter.metadata_aware.abstract', MetadataAwareNameConverter::class)
->abstract()
->args([service('serializer.mapping.class_metadata_factory')])
->set('serializer.name_converter.metadata_aware')
->parent('serializer.name_converter.metadata_aware.abstract')
// PropertyInfo extractor
->set('property_info.serializer_extractor', SerializerExtractor::class)
->args([service('serializer.mapping.class_metadata_factory')])
->tag('property_info.list_extractor', ['priority' => -999])
// ErrorRenderer integration
->alias('error_renderer', 'error_renderer.serializer')
->alias('error_renderer.serializer', 'error_handler.error_renderer.serializer')
->set('error_handler.error_renderer.serializer', SerializerErrorRenderer::class)
->args([
service('serializer'),
inline_service()
->factory([SerializerErrorRenderer::class, 'getPreferredFormat'])
->args([service('request_stack')]),
service('error_renderer.html'),
inline_service()
->factory([HtmlErrorRenderer::class, 'isDebug'])
->args([service('request_stack'), param('kernel.debug')]),
])
->set('serializer.normalizer.backed_enum', BackedEnumNormalizer::class)
->tag('serializer.normalizer', ['built_in' => true, 'priority' => -915])
->set('serializer.normalizer.number', NumberNormalizer::class)
->tag('serializer.normalizer', ['built_in' => true, 'priority' => -915])
;
};

View File

@@ -0,0 +1,33 @@
<?php
/*
* This file is part of the Symfony package.
*
* (c) Fabien Potencier <fabien@symfony.com>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace Symfony\Component\DependencyInjection\Loader\Configurator;
use Symfony\Component\Serializer\DataCollector\SerializerDataCollector;
use Symfony\Component\Serializer\Debug\TraceableSerializer;
return static function (ContainerConfigurator $container) {
$container->services()
->set('debug.serializer', TraceableSerializer::class)
->decorate('serializer')
->args([
service('debug.serializer.inner'),
service('serializer.data_collector'),
'default',
])
->set('serializer.data_collector', SerializerDataCollector::class)
->tag('data_collector', [
'template' => '@WebProfiler/Collector/serializer.html.twig',
'id' => 'serializer',
])
;
};

View File

@@ -0,0 +1,251 @@
<?php
/*
* This file is part of the Symfony package.
*
* (c) Fabien Potencier <fabien@symfony.com>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace Symfony\Component\DependencyInjection\Loader\Configurator;
use Psr\Clock\ClockInterface as PsrClockInterface;
use Psr\EventDispatcher\EventDispatcherInterface as PsrEventDispatcherInterface;
use Symfony\Bundle\FrameworkBundle\CacheWarmer\ConfigBuilderCacheWarmer;
use Symfony\Bundle\FrameworkBundle\HttpCache\HttpCache;
use Symfony\Component\Clock\Clock;
use Symfony\Component\Clock\ClockInterface;
use Symfony\Component\Config\Loader\LoaderInterface;
use Symfony\Component\Config\Resource\SelfCheckingResourceChecker;
use Symfony\Component\Config\ResourceCheckerConfigCacheFactory;
use Symfony\Component\Console\ConsoleEvents;
use Symfony\Component\DependencyInjection\Config\ContainerParametersResourceChecker;
use Symfony\Component\DependencyInjection\EnvVarProcessor;
use Symfony\Component\DependencyInjection\Parameter;
use Symfony\Component\DependencyInjection\ParameterBag\ContainerBag;
use Symfony\Component\DependencyInjection\ParameterBag\ContainerBagInterface;
use Symfony\Component\DependencyInjection\ParameterBag\ParameterBagInterface;
use Symfony\Component\DependencyInjection\ReverseContainer;
use Symfony\Component\EventDispatcher\EventDispatcher;
use Symfony\Component\EventDispatcher\EventDispatcherInterface as EventDispatcherInterfaceComponentAlias;
use Symfony\Component\Filesystem\Filesystem;
use Symfony\Component\Form\FormEvents;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\RequestStack;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpFoundation\Session\SessionInterface;
use Symfony\Component\HttpFoundation\UriSigner;
use Symfony\Component\HttpFoundation\UrlHelper;
use Symfony\Component\HttpKernel\CacheClearer\ChainCacheClearer;
use Symfony\Component\HttpKernel\CacheWarmer\CacheWarmerAggregate;
use Symfony\Component\HttpKernel\Config\FileLocator;
use Symfony\Component\HttpKernel\DependencyInjection\ServicesResetter;
use Symfony\Component\HttpKernel\DependencyInjection\ServicesResetterInterface;
use Symfony\Component\HttpKernel\EventListener\LocaleAwareListener;
use Symfony\Component\HttpKernel\HttpCache\Store;
use Symfony\Component\HttpKernel\HttpCache\StoreInterface;
use Symfony\Component\HttpKernel\HttpKernel;
use Symfony\Component\HttpKernel\HttpKernelInterface;
use Symfony\Component\HttpKernel\KernelEvents;
use Symfony\Component\HttpKernel\KernelInterface;
use Symfony\Component\Runtime\Runner\Symfony\HttpKernelRunner;
use Symfony\Component\Runtime\Runner\Symfony\ResponseRunner;
use Symfony\Component\Runtime\SymfonyRuntime;
use Symfony\Component\String\LazyString;
use Symfony\Component\String\Slugger\AsciiSlugger;
use Symfony\Component\String\Slugger\SluggerInterface;
use Symfony\Component\Workflow\WorkflowEvents;
use Symfony\Contracts\EventDispatcher\EventDispatcherInterface;
return static function (ContainerConfigurator $container) {
// this parameter is used at compile time in RegisterListenersPass
$container->parameters()->set('event_dispatcher.event_aliases', array_merge(
class_exists(ConsoleEvents::class) ? ConsoleEvents::ALIASES : [],
class_exists(FormEvents::class) ? FormEvents::ALIASES : [],
KernelEvents::ALIASES,
class_exists(WorkflowEvents::class) ? WorkflowEvents::ALIASES : []
));
$container->services()
->set('parameter_bag', ContainerBag::class)
->args([
service('service_container'),
])
->alias(ContainerBagInterface::class, 'parameter_bag')
->alias(ParameterBagInterface::class, 'parameter_bag')
->set('event_dispatcher', EventDispatcher::class)
->public()
->tag('container.hot_path')
->tag('event_dispatcher.dispatcher', ['name' => 'event_dispatcher'])
->alias(EventDispatcherInterfaceComponentAlias::class, 'event_dispatcher')
->alias(EventDispatcherInterface::class, 'event_dispatcher')
->alias(PsrEventDispatcherInterface::class, 'event_dispatcher')
->set('http_kernel', HttpKernel::class)
->public()
->args([
service('event_dispatcher'),
service('controller_resolver'),
service('request_stack'),
service('argument_resolver'),
false,
])
->tag('container.hot_path')
->tag('container.preload', ['class' => HttpKernelRunner::class])
->tag('container.preload', ['class' => ResponseRunner::class])
->tag('container.preload', ['class' => SymfonyRuntime::class])
->alias(HttpKernelInterface::class, 'http_kernel')
->set('request_stack', RequestStack::class)
->tag('kernel.reset', ['method' => 'resetRequestFormats', 'on_invalid' => 'ignore'])
->public()
->alias(RequestStack::class, 'request_stack')
->set('http_cache', HttpCache::class)
->args([
service('kernel'),
service('http_cache.store'),
service('esi')->nullOnInvalid(),
abstract_arg('options'),
])
->tag('container.hot_path')
->set('http_cache.store', Store::class)
->args([
param('kernel.cache_dir').'/http_cache',
])
->alias(StoreInterface::class, 'http_cache.store')
->set('url_helper', UrlHelper::class)
->args([
service('request_stack'),
service('router')->ignoreOnInvalid(),
])
->alias(UrlHelper::class, 'url_helper')
->set('cache_warmer', CacheWarmerAggregate::class)
->public()
->args([
tagged_iterator('kernel.cache_warmer'),
param('kernel.debug'),
\sprintf('%s/%sDeprecations.log', param('kernel.build_dir'), param('kernel.container_class')),
])
->tag('container.no_preload')
->set('cache_clearer', ChainCacheClearer::class)
->args([
tagged_iterator('kernel.cache_clearer'),
])
->set('kernel')
->synthetic()
->public()
->alias(KernelInterface::class, 'kernel')
->set('filesystem', Filesystem::class)
->alias(Filesystem::class, 'filesystem')
->set('file_locator', FileLocator::class)
->args([
service('kernel'),
])
->alias(FileLocator::class, 'file_locator')
->set('uri_signer', UriSigner::class)
->args([
new Parameter('kernel.secret'),
'_hash',
'_expiration',
service('clock')->nullOnInvalid(),
])
->lazy()
->alias(UriSigner::class, 'uri_signer')
->set('config_cache_factory', ResourceCheckerConfigCacheFactory::class)
->args([
tagged_iterator('config_cache.resource_checker'),
])
->set('dependency_injection.config.container_parameters_resource_checker', ContainerParametersResourceChecker::class)
->args([
service('service_container'),
])
->tag('config_cache.resource_checker', ['priority' => -980])
->set('config.resource.self_checking_resource_checker', SelfCheckingResourceChecker::class)
->tag('config_cache.resource_checker', ['priority' => -990])
->set('services_resetter', ServicesResetter::class)
->public()
->alias(ServicesResetterInterface::class, 'services_resetter')
->set('reverse_container', ReverseContainer::class)
->args([
service('service_container'),
service_locator([]),
])
->alias(ReverseContainer::class, 'reverse_container')
->set('locale_aware_listener', LocaleAwareListener::class)
->args([
[], // locale aware services
service('request_stack'),
])
->tag('kernel.event_subscriber')
->set('container.env_var_processor', EnvVarProcessor::class)
->args([
service('service_container'),
tagged_iterator('container.env_var_loader'),
])
->tag('container.env_var_processor')
->tag('kernel.reset', ['method' => 'reset'])
->set('slugger', AsciiSlugger::class)
->args([
param('kernel.default_locale'),
])
->tag('kernel.locale_aware')
->alias(SluggerInterface::class, 'slugger')
->set('container.getenv', \Closure::class)
->factory([\Closure::class, 'fromCallable'])
->args([
[service('service_container'), 'getEnv'],
])
->tag('routing.expression_language_function', ['function' => 'env'])
->set('container.get_routing_condition_service', \Closure::class)
->public()
->factory([\Closure::class, 'fromCallable'])
->args([
[tagged_locator('routing.condition_service', 'alias'), 'get'],
])
->tag('routing.expression_language_function', ['function' => 'service'])
// inherit from this service to lazily access env vars
->set('container.env', LazyString::class)
->abstract()
->factory([LazyString::class, 'fromCallable'])
->args([
service('container.getenv'),
])
->set('config_builder.warmer', ConfigBuilderCacheWarmer::class)
->args([service(KernelInterface::class), service('logger')->nullOnInvalid()])
->tag('kernel.cache_warmer')
->set('clock', Clock::class)
->alias(ClockInterface::class, 'clock')
->alias(PsrClockInterface::class, 'clock')
// register as abstract and excluded, aka not-autowirable types
->set(LoaderInterface::class)->abstract()->tag('container.excluded')
->set(Request::class)->abstract()->tag('container.excluded')
->set(Response::class)->abstract()->tag('container.excluded')
->set(SessionInterface::class)->abstract()->tag('container.excluded')
;
};

View File

@@ -0,0 +1,110 @@
<?php
/*
* This file is part of the Symfony package.
*
* (c) Fabien Potencier <fabien@symfony.com>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace Symfony\Component\DependencyInjection\Loader\Configurator;
use Symfony\Component\HttpFoundation\Session\SessionFactory;
use Symfony\Component\HttpFoundation\Session\Storage\Handler\AbstractSessionHandler;
use Symfony\Component\HttpFoundation\Session\Storage\Handler\IdentityMarshaller;
use Symfony\Component\HttpFoundation\Session\Storage\Handler\MarshallingSessionHandler;
use Symfony\Component\HttpFoundation\Session\Storage\Handler\NativeFileSessionHandler;
use Symfony\Component\HttpFoundation\Session\Storage\Handler\SessionHandlerFactory;
use Symfony\Component\HttpFoundation\Session\Storage\Handler\StrictSessionHandler;
use Symfony\Component\HttpFoundation\Session\Storage\MetadataBag;
use Symfony\Component\HttpFoundation\Session\Storage\MockFileSessionStorageFactory;
use Symfony\Component\HttpFoundation\Session\Storage\NativeSessionStorageFactory;
use Symfony\Component\HttpFoundation\Session\Storage\PhpBridgeSessionStorageFactory;
use Symfony\Component\HttpKernel\EventListener\SessionListener;
return static function (ContainerConfigurator $container) {
$container->parameters()->set('session.metadata.storage_key', '_sf2_meta');
$container->services()
->set('session.factory', SessionFactory::class)
->args([
service('request_stack'),
service('session.storage.factory'),
[service('session_listener'), 'onSessionUsage'],
])
->set('session.storage.factory.native', NativeSessionStorageFactory::class)
->args([
param('session.storage.options'),
service('session.handler'),
inline_service(MetadataBag::class)
->args([
param('session.metadata.storage_key'),
param('session.metadata.update_threshold'),
]),
false,
])
->set('session.storage.factory.php_bridge', PhpBridgeSessionStorageFactory::class)
->args([
service('session.handler'),
inline_service(MetadataBag::class)
->args([
param('session.metadata.storage_key'),
param('session.metadata.update_threshold'),
]),
false,
])
->set('session.storage.factory.mock_file', MockFileSessionStorageFactory::class)
->args([
param('kernel.cache_dir').'/sessions',
'MOCKSESSID',
inline_service(MetadataBag::class)
->args([
param('session.metadata.storage_key'),
param('session.metadata.update_threshold'),
]),
])
->alias(\SessionHandlerInterface::class, 'session.handler')
->set('session.handler.native', StrictSessionHandler::class)
->args([
inline_service(\SessionHandler::class),
])
->set('session.handler.native_file', StrictSessionHandler::class)
->args([
inline_service(NativeFileSessionHandler::class)
->args([param('session.save_path')]),
])
->set('session.abstract_handler', AbstractSessionHandler::class)
->factory([SessionHandlerFactory::class, 'createHandler'])
->args([abstract_arg('A string or a connection object'), []])
->set('session_listener', SessionListener::class)
->args([
service_locator([
'session_factory' => service('session.factory')->ignoreOnInvalid(),
'logger' => service('logger')->ignoreOnInvalid(),
'session_collector' => service('data_collector.request.session_collector')->ignoreOnInvalid(),
'request_stack' => service('request_stack')->ignoreOnInvalid(),
]),
param('kernel.debug'),
param('session.storage.options'),
])
->tag('kernel.event_subscriber')
->tag('kernel.reset', ['method' => 'reset'])
->set('session.marshaller', IdentityMarshaller::class)
->set('session.marshalling_handler', MarshallingSessionHandler::class)
->decorate('session.handler')
->args([
service('session.marshalling_handler.inner'),
service('session.marshaller'),
])
;
};

View File

@@ -0,0 +1,25 @@
<?php
/*
* This file is part of the Symfony package.
*
* (c) Fabien Potencier <fabien@symfony.com>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace Symfony\Component\DependencyInjection\Loader\Configurator;
use Symfony\Component\HttpKernel\EventListener\SurrogateListener;
use Symfony\Component\HttpKernel\HttpCache\Ssi;
return static function (ContainerConfigurator $container) {
$container->services()
->set('ssi', Ssi::class)
->set('ssi_listener', SurrogateListener::class)
->args([service('ssi')->ignoreOnInvalid()])
->tag('kernel.event_subscriber')
;
};

View File

@@ -0,0 +1,59 @@
<?php
/*
* This file is part of the Symfony package.
*
* (c) Fabien Potencier <fabien@symfony.com>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace Symfony\Component\DependencyInjection\Loader\Configurator;
use Symfony\Bundle\FrameworkBundle\KernelBrowser;
use Symfony\Bundle\FrameworkBundle\Test\TestContainer;
use Symfony\Component\BrowserKit\CookieJar;
use Symfony\Component\BrowserKit\History;
use Symfony\Component\DependencyInjection\ServiceLocator;
use Symfony\Component\HttpKernel\EventListener\SessionListener;
return static function (ContainerConfigurator $container) {
$container->parameters()->set('test.client.parameters', []);
$container->services()
->set('test.client', KernelBrowser::class)
->args([
service('kernel'),
param('test.client.parameters'),
service('test.client.history'),
service('test.client.cookiejar'),
])
->share(false)
->public()
->set('test.client.history', History::class)->share(false)
->set('test.client.cookiejar', CookieJar::class)->share(false)
->set('test.session.listener', SessionListener::class)
->args([
service_locator([
'session_factory' => service('session.factory')->ignoreOnInvalid(),
]),
param('kernel.debug'),
param('session.storage.options'),
])
->tag('kernel.event_subscriber')
->set('test.service_container', TestContainer::class)
->args([
service('kernel'),
'test.private_services_locator',
])
->public()
->set('test.private_services_locator', ServiceLocator::class)
->args([abstract_arg('callable collection')])
->public()
;
};

View File

@@ -0,0 +1,192 @@
<?php
/*
* This file is part of the Symfony package.
*
* (c) Fabien Potencier <fabien@symfony.com>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace Symfony\Component\DependencyInjection\Loader\Configurator;
use Psr\Container\ContainerInterface;
use Symfony\Bundle\FrameworkBundle\CacheWarmer\TranslationsCacheWarmer;
use Symfony\Bundle\FrameworkBundle\Translation\Translator;
use Symfony\Component\Translation\Dumper\CsvFileDumper;
use Symfony\Component\Translation\Dumper\IcuResFileDumper;
use Symfony\Component\Translation\Dumper\IniFileDumper;
use Symfony\Component\Translation\Dumper\JsonFileDumper;
use Symfony\Component\Translation\Dumper\MoFileDumper;
use Symfony\Component\Translation\Dumper\PhpFileDumper;
use Symfony\Component\Translation\Dumper\PoFileDumper;
use Symfony\Component\Translation\Dumper\QtFileDumper;
use Symfony\Component\Translation\Dumper\XliffFileDumper;
use Symfony\Component\Translation\Dumper\YamlFileDumper;
use Symfony\Component\Translation\Extractor\ChainExtractor;
use Symfony\Component\Translation\Extractor\ExtractorInterface;
use Symfony\Component\Translation\Extractor\PhpAstExtractor;
use Symfony\Component\Translation\Extractor\Visitor\ConstraintVisitor;
use Symfony\Component\Translation\Extractor\Visitor\TranslatableMessageVisitor;
use Symfony\Component\Translation\Extractor\Visitor\TransMethodVisitor;
use Symfony\Component\Translation\Formatter\MessageFormatter;
use Symfony\Component\Translation\Loader\CsvFileLoader;
use Symfony\Component\Translation\Loader\IcuDatFileLoader;
use Symfony\Component\Translation\Loader\IcuResFileLoader;
use Symfony\Component\Translation\Loader\IniFileLoader;
use Symfony\Component\Translation\Loader\JsonFileLoader;
use Symfony\Component\Translation\Loader\MoFileLoader;
use Symfony\Component\Translation\Loader\PhpFileLoader;
use Symfony\Component\Translation\Loader\PoFileLoader;
use Symfony\Component\Translation\Loader\QtFileLoader;
use Symfony\Component\Translation\Loader\XliffFileLoader;
use Symfony\Component\Translation\Loader\YamlFileLoader;
use Symfony\Component\Translation\LocaleSwitcher;
use Symfony\Component\Translation\LoggingTranslator;
use Symfony\Component\Translation\Reader\TranslationReader;
use Symfony\Component\Translation\Reader\TranslationReaderInterface;
use Symfony\Component\Translation\Writer\TranslationWriter;
use Symfony\Component\Translation\Writer\TranslationWriterInterface;
use Symfony\Contracts\Translation\LocaleAwareInterface;
use Symfony\Contracts\Translation\TranslatorInterface;
return static function (ContainerConfigurator $container) {
$container->services()
->set('translator.default', Translator::class)
->args([
abstract_arg('translation loaders locator'),
service('translator.formatter'),
param('kernel.default_locale'),
abstract_arg('translation loaders ids'),
[
'cache_dir' => param('kernel.cache_dir').'/translations',
'debug' => param('kernel.debug'),
],
abstract_arg('enabled locales'),
])
->call('setConfigCacheFactory', [service('config_cache_factory')])
->tag('kernel.locale_aware')
->alias(TranslatorInterface::class, 'translator')
->set('translator.logging', LoggingTranslator::class)
->args([
service('translator.logging.inner'),
service('logger'),
])
->tag('monolog.logger', ['channel' => 'translation'])
->set('translator.formatter.default', MessageFormatter::class)
->args([service('identity_translator')])
->set('translation.loader.php', PhpFileLoader::class)
->tag('translation.loader', ['alias' => 'php'])
->set('translation.loader.yml', YamlFileLoader::class)
->tag('translation.loader', ['alias' => 'yaml', 'legacy-alias' => 'yml'])
->set('translation.loader.xliff', XliffFileLoader::class)
->tag('translation.loader', ['alias' => 'xlf', 'legacy-alias' => 'xliff'])
->set('translation.loader.po', PoFileLoader::class)
->tag('translation.loader', ['alias' => 'po'])
->set('translation.loader.mo', MoFileLoader::class)
->tag('translation.loader', ['alias' => 'mo'])
->set('translation.loader.qt', QtFileLoader::class)
->tag('translation.loader', ['alias' => 'ts'])
->set('translation.loader.csv', CsvFileLoader::class)
->tag('translation.loader', ['alias' => 'csv'])
->set('translation.loader.res', IcuResFileLoader::class)
->tag('translation.loader', ['alias' => 'res'])
->set('translation.loader.dat', IcuDatFileLoader::class)
->tag('translation.loader', ['alias' => 'dat'])
->set('translation.loader.ini', IniFileLoader::class)
->tag('translation.loader', ['alias' => 'ini'])
->set('translation.loader.json', JsonFileLoader::class)
->tag('translation.loader', ['alias' => 'json'])
->set('translation.dumper.php', PhpFileDumper::class)
->tag('translation.dumper', ['alias' => 'php'])
->set('translation.dumper.xliff', XliffFileDumper::class)
->tag('translation.dumper', ['alias' => 'xlf'])
->set('translation.dumper.xliff.xliff', XliffFileDumper::class)
->args(['xliff'])
->tag('translation.dumper', ['alias' => 'xliff'])
->set('translation.dumper.po', PoFileDumper::class)
->tag('translation.dumper', ['alias' => 'po'])
->set('translation.dumper.mo', MoFileDumper::class)
->tag('translation.dumper', ['alias' => 'mo'])
->set('translation.dumper.yml', YamlFileDumper::class)
->tag('translation.dumper', ['alias' => 'yml'])
->set('translation.dumper.yaml', YamlFileDumper::class)
->args(['yaml'])
->tag('translation.dumper', ['alias' => 'yaml'])
->set('translation.dumper.qt', QtFileDumper::class)
->tag('translation.dumper', ['alias' => 'ts'])
->set('translation.dumper.csv', CsvFileDumper::class)
->tag('translation.dumper', ['alias' => 'csv'])
->set('translation.dumper.ini', IniFileDumper::class)
->tag('translation.dumper', ['alias' => 'ini'])
->set('translation.dumper.json', JsonFileDumper::class)
->tag('translation.dumper', ['alias' => 'json'])
->set('translation.dumper.res', IcuResFileDumper::class)
->tag('translation.dumper', ['alias' => 'res'])
->set('translation.extractor.php_ast', PhpAstExtractor::class)
->args([tagged_iterator('translation.extractor.visitor')])
->tag('translation.extractor', ['alias' => 'php'])
->set('translation.extractor.visitor.trans_method', TransMethodVisitor::class)
->tag('translation.extractor.visitor')
->set('translation.extractor.visitor.translatable_message', TranslatableMessageVisitor::class)
->tag('translation.extractor.visitor')
->set('translation.extractor.visitor.constraint', ConstraintVisitor::class)
->tag('translation.extractor.visitor')
->set('translation.reader', TranslationReader::class)
->alias(TranslationReaderInterface::class, 'translation.reader')
->set('translation.extractor', ChainExtractor::class)
->alias(ExtractorInterface::class, 'translation.extractor')
->set('translation.writer', TranslationWriter::class)
->alias(TranslationWriterInterface::class, 'translation.writer')
->set('translation.warmer', TranslationsCacheWarmer::class)
->args([service(ContainerInterface::class)])
->tag('container.service_subscriber', ['id' => 'translator'])
->tag('kernel.cache_warmer')
->set('translation.locale_switcher', LocaleSwitcher::class)
->args([
param('kernel.default_locale'),
tagged_iterator('kernel.locale_aware', exclude: 'translation.locale_switcher'),
service('router.request_context')->ignoreOnInvalid(),
])
->tag('kernel.reset', ['method' => 'reset'])
->tag('kernel.locale_aware')
->alias(LocaleAwareInterface::class, 'translation.locale_switcher')
->alias(LocaleSwitcher::class, 'translation.locale_switcher')
;
};

View File

@@ -0,0 +1,30 @@
<?php
/*
* This file is part of the Symfony package.
*
* (c) Fabien Potencier <fabien@symfony.com>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace Symfony\Component\DependencyInjection\Loader\Configurator;
use Symfony\Component\Translation\DataCollector\TranslationDataCollector;
use Symfony\Component\Translation\DataCollectorTranslator;
return static function (ContainerConfigurator $container) {
$container->services()
->set('translator.data_collector', DataCollectorTranslator::class)
->args([service('translator.data_collector.inner')])
->set('data_collector.translation', TranslationDataCollector::class)
->args([service('translator.data_collector')])
->tag('data_collector', [
'template' => '@WebProfiler/Collector/translation.html.twig',
'id' => 'translation',
'priority' => 275,
])
;
};

View File

@@ -0,0 +1,79 @@
<?php
/*
* This file is part of the Symfony package.
*
* (c) Fabien Potencier <fabien@symfony.com>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace Symfony\Component\DependencyInjection\Loader\Configurator;
use Symfony\Component\Translation\Bridge\Crowdin\CrowdinProviderFactory;
use Symfony\Component\Translation\Bridge\Loco\LocoProviderFactory;
use Symfony\Component\Translation\Bridge\Lokalise\LokaliseProviderFactory;
use Symfony\Component\Translation\Bridge\Phrase\PhraseProviderFactory;
use Symfony\Component\Translation\Provider\NullProviderFactory;
use Symfony\Component\Translation\Provider\TranslationProviderCollection;
use Symfony\Component\Translation\Provider\TranslationProviderCollectionFactory;
return static function (ContainerConfigurator $container) {
$container->services()
->set('translation.provider_collection', TranslationProviderCollection::class)
->factory([service('translation.provider_collection_factory'), 'fromConfig'])
->args([
[], // Providers
])
->set('translation.provider_collection_factory', TranslationProviderCollectionFactory::class)
->args([
tagged_iterator('translation.provider_factory'),
[], // Enabled locales
])
->set('translation.provider_factory.null', NullProviderFactory::class)
->tag('translation.provider_factory')
->set('translation.provider_factory.crowdin', CrowdinProviderFactory::class)
->args([
service('http_client'),
service('logger'),
param('kernel.default_locale'),
service('translation.loader.xliff'),
service('translation.dumper.xliff'),
])
->tag('translation.provider_factory')
->set('translation.provider_factory.loco', LocoProviderFactory::class)
->args([
service('http_client'),
service('logger'),
param('kernel.default_locale'),
service('translation.loader.xliff'),
service('translator'),
])
->tag('translation.provider_factory')
->set('translation.provider_factory.lokalise', LokaliseProviderFactory::class)
->args([
service('http_client'),
service('logger'),
param('kernel.default_locale'),
service('translation.loader.xliff'),
])
->tag('translation.provider_factory')
->set('translation.provider_factory.phrase', PhraseProviderFactory::class)
->args([
service('http_client'),
service('logger'),
service('translation.loader.xliff'),
service('translation.dumper.xliff'),
service('cache.app'),
param('kernel.default_locale'),
])
->tag('translation.provider_factory')
;
};

View File

@@ -0,0 +1,50 @@
<?php
/*
* This file is part of the Symfony package.
*
* (c) Fabien Potencier <fabien@symfony.com>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace Symfony\Component\DependencyInjection\Loader\Configurator;
use Symfony\Component\TypeInfo\TypeContext\TypeContextFactory;
use Symfony\Component\TypeInfo\TypeResolver\ReflectionParameterTypeResolver;
use Symfony\Component\TypeInfo\TypeResolver\ReflectionPropertyTypeResolver;
use Symfony\Component\TypeInfo\TypeResolver\ReflectionReturnTypeResolver;
use Symfony\Component\TypeInfo\TypeResolver\ReflectionTypeResolver;
use Symfony\Component\TypeInfo\TypeResolver\TypeResolver;
use Symfony\Component\TypeInfo\TypeResolver\TypeResolverInterface;
return static function (ContainerConfigurator $container) {
$container->services()
// type context
->set('type_info.type_context_factory', TypeContextFactory::class)
->args([service('type_info.resolver.string')->nullOnInvalid()])
// type resolvers
->set('type_info.resolver', TypeResolver::class)
->args([service_locator([
\ReflectionType::class => service('type_info.resolver.reflection_type'),
\ReflectionParameter::class => service('type_info.resolver.reflection_parameter'),
\ReflectionProperty::class => service('type_info.resolver.reflection_property'),
\ReflectionFunctionAbstract::class => service('type_info.resolver.reflection_return'),
])])
->alias(TypeResolverInterface::class, 'type_info.resolver')
->set('type_info.resolver.reflection_type', ReflectionTypeResolver::class)
->args([service('type_info.type_context_factory')])
->set('type_info.resolver.reflection_parameter', ReflectionParameterTypeResolver::class)
->args([service('type_info.resolver.reflection_type'), service('type_info.type_context_factory')])
->set('type_info.resolver.reflection_property', ReflectionPropertyTypeResolver::class)
->args([service('type_info.resolver.reflection_type'), service('type_info.type_context_factory')])
->set('type_info.resolver.reflection_return', ReflectionReturnTypeResolver::class)
->args([service('type_info.resolver.reflection_type'), service('type_info.type_context_factory')])
;
};

View File

@@ -0,0 +1,41 @@
<?php
/*
* This file is part of the Symfony package.
*
* (c) Fabien Potencier <fabien@symfony.com>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace Symfony\Component\DependencyInjection\Loader\Configurator;
use Symfony\Component\Uid\Factory\NameBasedUuidFactory;
use Symfony\Component\Uid\Factory\RandomBasedUuidFactory;
use Symfony\Component\Uid\Factory\TimeBasedUuidFactory;
use Symfony\Component\Uid\Factory\UlidFactory;
use Symfony\Component\Uid\Factory\UuidFactory;
return static function (ContainerConfigurator $container) {
$container->services()
->set('ulid.factory', UlidFactory::class)
->alias(UlidFactory::class, 'ulid.factory')
->set('uuid.factory', UuidFactory::class)
->alias(UuidFactory::class, 'uuid.factory')
->set('name_based_uuid.factory', NameBasedUuidFactory::class)
->factory([service('uuid.factory'), 'nameBased'])
->args([abstract_arg('Please set the "framework.uid.name_based_uuid_namespace" configuration option to use the "name_based_uuid.factory" service')])
->alias(NameBasedUuidFactory::class, 'name_based_uuid.factory')
->set('random_based_uuid.factory', RandomBasedUuidFactory::class)
->factory([service('uuid.factory'), 'randomBased'])
->alias(RandomBasedUuidFactory::class, 'random_based_uuid.factory')
->set('time_based_uuid.factory', TimeBasedUuidFactory::class)
->factory([service('uuid.factory'), 'timeBased'])
->alias(TimeBasedUuidFactory::class, 'time_based_uuid.factory')
;
};

View File

@@ -0,0 +1,131 @@
<?php
/*
* This file is part of the Symfony package.
*
* (c) Fabien Potencier <fabien@symfony.com>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace Symfony\Component\DependencyInjection\Loader\Configurator;
use Symfony\Bundle\FrameworkBundle\CacheWarmer\ValidatorCacheWarmer;
use Symfony\Component\Cache\Adapter\PhpArrayAdapter;
use Symfony\Component\ExpressionLanguage\ExpressionLanguage;
use Symfony\Component\Validator\Constraints\EmailValidator;
use Symfony\Component\Validator\Constraints\ExpressionLanguageProvider;
use Symfony\Component\Validator\Constraints\ExpressionValidator;
use Symfony\Component\Validator\Constraints\NoSuspiciousCharactersValidator;
use Symfony\Component\Validator\Constraints\NotCompromisedPasswordValidator;
use Symfony\Component\Validator\Constraints\WhenValidator;
use Symfony\Component\Validator\ContainerConstraintValidatorFactory;
use Symfony\Component\Validator\Mapping\Loader\PropertyInfoLoader;
use Symfony\Component\Validator\Validation;
use Symfony\Component\Validator\Validator\ValidatorInterface;
use Symfony\Component\Validator\ValidatorBuilder;
return static function (ContainerConfigurator $container) {
$container->parameters()
->set('validator.mapping.cache.file', '%kernel.build_dir%/validation.php');
$validatorsDir = \dirname((new \ReflectionClass(EmailValidator::class))->getFileName());
$container->services()
->set('validator', ValidatorInterface::class)
->factory([service('validator.builder'), 'getValidator'])
->alias(ValidatorInterface::class, 'validator')
->set('validator.builder', ValidatorBuilder::class)
->factory([Validation::class, 'createValidatorBuilder'])
->call('setConstraintValidatorFactory', [
service('validator.validator_factory'),
])
->call('setGroupProviderLocator', [
tagged_locator('validator.group_provider'),
])
->call('setTranslator', [
service('translator')->ignoreOnInvalid(),
])
->call('setTranslationDomain', [
param('validator.translation_domain'),
])
->alias('validator.mapping.class_metadata_factory', 'validator')
->set('validator.mapping.cache_warmer', ValidatorCacheWarmer::class)
->args([
service('validator.builder'),
param('validator.mapping.cache.file'),
])
->tag('kernel.cache_warmer')
->set('validator.mapping.cache.adapter', PhpArrayAdapter::class)
->factory([PhpArrayAdapter::class, 'create'])
->args([
param('validator.mapping.cache.file'),
service('cache.validator'),
])
->set('validator.validator_factory', ContainerConstraintValidatorFactory::class)
->args([
abstract_arg('Constraint validators locator'),
])
->load('Symfony\Component\Validator\Constraints\\', $validatorsDir.'/*Validator.php')
->exclude($validatorsDir.'/ExpressionLanguageSyntaxValidator.php')
->abstract()
->tag('container.excluded')
->tag('validator.constraint_validator')
->set('validator.expression', ExpressionValidator::class)
->args([service('validator.expression_language')->nullOnInvalid()])
->tag('validator.constraint_validator', [
'alias' => 'validator.expression',
])
->set('validator.expression_language', ExpressionLanguage::class)
->args([service('cache.validator_expression_language')->nullOnInvalid()])
->call('registerProvider', [
service('validator.expression_language_provider')->ignoreOnInvalid(),
])
->set('cache.validator_expression_language')
->parent('cache.system')
->tag('cache.pool')
->set('validator.expression_language_provider', ExpressionLanguageProvider::class)
->set('validator.email', EmailValidator::class)
->args([
abstract_arg('Default mode'),
])
->tag('validator.constraint_validator')
->set('validator.not_compromised_password', NotCompromisedPasswordValidator::class)
->args([
service('http_client')->nullOnInvalid(),
param('kernel.charset'),
false,
])
->tag('validator.constraint_validator')
->set('validator.when', WhenValidator::class)
->args([service('validator.expression_language')->nullOnInvalid()])
->tag('validator.constraint_validator')
->set('validator.no_suspicious_characters', NoSuspiciousCharactersValidator::class)
->args([param('kernel.enabled_locales')])
->tag('validator.constraint_validator', [
'alias' => NoSuspiciousCharactersValidator::class,
])
->set('validator.property_info_loader', PropertyInfoLoader::class)
->args([
service('property_info'),
service('property_info'),
service('property_info'),
])
->tag('validator.auto_mapper')
;
};

View File

@@ -0,0 +1,39 @@
<?php
/*
* This file is part of the Symfony package.
*
* (c) Fabien Potencier <fabien@symfony.com>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace Symfony\Component\DependencyInjection\Loader\Configurator;
use Symfony\Component\Validator\DataCollector\ValidatorDataCollector;
use Symfony\Component\Validator\Validator\TraceableValidator;
return static function (ContainerConfigurator $container) {
$container->services()
->set('debug.validator', TraceableValidator::class)
->decorate('validator', null, 255)
->args([
service('debug.validator.inner'),
service('profiler.is_disabled_state_checker')->nullOnInvalid(),
])
->tag('kernel.reset', [
'method' => 'reset',
])
->set('data_collector.validator', ValidatorDataCollector::class)
->args([
service('debug.validator'),
])
->tag('data_collector', [
'template' => '@WebProfiler/Collector/validator.html.twig',
'id' => 'validator',
'priority' => 320,
])
;
};

View File

@@ -0,0 +1,150 @@
<?php
/*
* This file is part of the Symfony package.
*
* (c) Fabien Potencier <fabien@symfony.com>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace Symfony\Component\DependencyInjection\Loader\Configurator;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Bundle\FrameworkBundle\Controller\ControllerResolver;
use Symfony\Bundle\FrameworkBundle\Controller\TemplateController;
use Symfony\Component\HttpKernel\Controller\ArgumentResolver;
use Symfony\Component\HttpKernel\Controller\ArgumentResolver\BackedEnumValueResolver;
use Symfony\Component\HttpKernel\Controller\ArgumentResolver\DateTimeValueResolver;
use Symfony\Component\HttpKernel\Controller\ArgumentResolver\DefaultValueResolver;
use Symfony\Component\HttpKernel\Controller\ArgumentResolver\QueryParameterValueResolver;
use Symfony\Component\HttpKernel\Controller\ArgumentResolver\RequestAttributeValueResolver;
use Symfony\Component\HttpKernel\Controller\ArgumentResolver\RequestPayloadValueResolver;
use Symfony\Component\HttpKernel\Controller\ArgumentResolver\RequestValueResolver;
use Symfony\Component\HttpKernel\Controller\ArgumentResolver\ServiceValueResolver;
use Symfony\Component\HttpKernel\Controller\ArgumentResolver\SessionValueResolver;
use Symfony\Component\HttpKernel\Controller\ArgumentResolver\UidValueResolver;
use Symfony\Component\HttpKernel\Controller\ArgumentResolver\VariadicValueResolver;
use Symfony\Component\HttpKernel\Controller\ErrorController;
use Symfony\Component\HttpKernel\ControllerMetadata\ArgumentMetadataFactory;
use Symfony\Component\HttpKernel\EventListener\CacheAttributeListener;
use Symfony\Component\HttpKernel\EventListener\DisallowRobotsIndexingListener;
use Symfony\Component\HttpKernel\EventListener\ErrorListener;
use Symfony\Component\HttpKernel\EventListener\LocaleListener;
use Symfony\Component\HttpKernel\EventListener\ResponseListener;
use Symfony\Component\HttpKernel\EventListener\ValidateRequestListener;
return static function (ContainerConfigurator $container) {
$container->services()
->set('controller_resolver', ControllerResolver::class)
->args([
service('service_container'),
service('logger')->ignoreOnInvalid(),
])
->call('allowControllers', [[AbstractController::class, TemplateController::class]])
->tag('monolog.logger', ['channel' => 'request'])
->set('argument_metadata_factory', ArgumentMetadataFactory::class)
->set('argument_resolver', ArgumentResolver::class)
->args([
service('argument_metadata_factory'),
abstract_arg('argument value resolvers'),
abstract_arg('targeted value resolvers'),
])
->set('argument_resolver.backed_enum_resolver', BackedEnumValueResolver::class)
->tag('controller.argument_value_resolver', ['priority' => 100, 'name' => BackedEnumValueResolver::class])
->set('argument_resolver.uid', UidValueResolver::class)
->tag('controller.argument_value_resolver', ['priority' => 100, 'name' => UidValueResolver::class])
->set('argument_resolver.datetime', DateTimeValueResolver::class)
->args([
service('clock')->nullOnInvalid(),
])
->tag('controller.argument_value_resolver', ['priority' => 100, 'name' => DateTimeValueResolver::class])
->set('argument_resolver.request_payload', RequestPayloadValueResolver::class)
->args([
service('serializer'),
service('validator')->nullOnInvalid(),
service('translator')->nullOnInvalid(),
param('validator.translation_domain'),
])
->tag('controller.targeted_value_resolver', ['name' => RequestPayloadValueResolver::class])
->tag('kernel.event_subscriber')
->lazy()
->set('argument_resolver.request_attribute', RequestAttributeValueResolver::class)
->tag('controller.argument_value_resolver', ['priority' => 100, 'name' => RequestAttributeValueResolver::class])
->set('argument_resolver.request', RequestValueResolver::class)
->tag('controller.argument_value_resolver', ['priority' => 50, 'name' => RequestValueResolver::class])
->set('argument_resolver.session', SessionValueResolver::class)
->tag('controller.argument_value_resolver', ['priority' => 50, 'name' => SessionValueResolver::class])
->set('argument_resolver.service', ServiceValueResolver::class)
->args([
abstract_arg('service locator, set in RegisterControllerArgumentLocatorsPass'),
])
->tag('controller.argument_value_resolver', ['priority' => -50, 'name' => ServiceValueResolver::class])
->set('argument_resolver.default', DefaultValueResolver::class)
->tag('controller.argument_value_resolver', ['priority' => -100, 'name' => DefaultValueResolver::class])
->set('argument_resolver.variadic', VariadicValueResolver::class)
->tag('controller.argument_value_resolver', ['priority' => -150, 'name' => VariadicValueResolver::class])
->set('argument_resolver.query_parameter_value_resolver', QueryParameterValueResolver::class)
->tag('controller.targeted_value_resolver', ['name' => QueryParameterValueResolver::class])
->set('response_listener', ResponseListener::class)
->args([
param('kernel.charset'),
abstract_arg('The "set_content_language_from_locale" config value'),
])
->tag('kernel.event_subscriber')
->set('locale_listener', LocaleListener::class)
->args([
service('request_stack'),
param('kernel.default_locale'),
service('router')->ignoreOnInvalid(),
abstract_arg('The "set_locale_from_accept_language" config value'),
param('kernel.enabled_locales'),
])
->tag('kernel.event_subscriber')
->set('validate_request_listener', ValidateRequestListener::class)
->tag('kernel.event_subscriber')
->set('disallow_search_engine_index_response_listener', DisallowRobotsIndexingListener::class)
->tag('kernel.event_subscriber')
->set('error_controller', ErrorController::class)
->public()
->args([
service('http_kernel'),
param('kernel.error_controller'),
service('error_renderer'),
])
->set('exception_listener', ErrorListener::class)
->args([
param('kernel.error_controller'),
service('logger')->nullOnInvalid(),
param('kernel.debug'),
abstract_arg('an exceptions to log & status code mapping'),
abstract_arg('list of loggers by log_channel'),
])
->tag('kernel.event_subscriber')
->tag('monolog.logger', ['channel' => 'request'])
->set('controller.cache_attribute_listener', CacheAttributeListener::class)
->tag('kernel.event_subscriber')
;
};

View File

@@ -0,0 +1,29 @@
<?php
/*
* This file is part of the Symfony package.
*
* (c) Fabien Potencier <fabien@symfony.com>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace Symfony\Component\DependencyInjection\Loader\Configurator;
use Symfony\Component\WebLink\EventListener\AddLinkHeaderListener;
use Symfony\Component\WebLink\HttpHeaderSerializer;
return static function (ContainerConfigurator $container) {
$container->services()
->set('web_link.http_header_serializer', HttpHeaderSerializer::class)
->alias(HttpHeaderSerializer::class, 'web_link.http_header_serializer')
->set('web_link.add_link_header_listener', AddLinkHeaderListener::class)
->args([
service('web_link.http_header_serializer'),
])
->tag('kernel.event_subscriber')
;
};

View File

@@ -0,0 +1,66 @@
<?php
/*
* This file is part of the Symfony package.
*
* (c) Fabien Potencier <fabien@symfony.com>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace Symfony\Component\DependencyInjection\Loader\Configurator;
use Symfony\Component\Webhook\Client\RequestParser;
use Symfony\Component\Webhook\Controller\WebhookController;
use Symfony\Component\Webhook\Messenger\SendWebhookHandler;
use Symfony\Component\Webhook\Server\HeadersConfigurator;
use Symfony\Component\Webhook\Server\HeaderSignatureConfigurator;
use Symfony\Component\Webhook\Server\JsonBodyConfigurator;
use Symfony\Component\Webhook\Server\NativeJsonPayloadSerializer;
use Symfony\Component\Webhook\Server\SerializerPayloadSerializer;
use Symfony\Component\Webhook\Server\Transport;
return static function (ContainerConfigurator $container) {
$container->services()
->set('webhook.transport', Transport::class)
->args([
service('http_client'),
service('webhook.headers_configurator'),
service('webhook.body_configurator.json'),
service('webhook.signer'),
])
->set('webhook.headers_configurator', HeadersConfigurator::class)
->set('webhook.body_configurator.json', JsonBodyConfigurator::class)
->args([
abstract_arg('payload serializer'),
])
->set('webhook.payload_serializer.json', NativeJsonPayloadSerializer::class)
->set('webhook.payload_serializer.serializer', SerializerPayloadSerializer::class)
->args([
service('serializer'),
])
->set('webhook.signer', HeaderSignatureConfigurator::class)
->set('webhook.messenger.send_handler', SendWebhookHandler::class)
->args([
service('webhook.transport'),
])
->tag('messenger.message_handler')
->set('webhook.request_parser', RequestParser::class)
->alias(RequestParser::class, 'webhook.request_parser')
->set('webhook.controller', WebhookController::class)
->public()
->args([
abstract_arg('user defined parsers'),
abstract_arg('message bus'),
])
;
};

View File

@@ -0,0 +1,46 @@
<?php
/*
* This file is part of the Symfony package.
*
* (c) Fabien Potencier <fabien@symfony.com>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace Symfony\Component\DependencyInjection\Loader\Configurator;
use Symfony\Component\Workflow\EventListener\ExpressionLanguage;
use Symfony\Component\Workflow\MarkingStore\MethodMarkingStore;
use Symfony\Component\Workflow\Registry;
use Symfony\Component\Workflow\StateMachine;
use Symfony\Component\Workflow\Workflow;
return static function (ContainerConfigurator $container) {
$container->services()
->set('workflow.abstract', Workflow::class)
->args([
abstract_arg('workflow definition'),
abstract_arg('marking store'),
service('event_dispatcher')->ignoreOnInvalid(),
abstract_arg('workflow name'),
abstract_arg('events to dispatch'),
])
->abstract()
->set('state_machine.abstract', StateMachine::class)
->args([
abstract_arg('workflow definition'),
abstract_arg('marking store'),
service('event_dispatcher')->ignoreOnInvalid(),
abstract_arg('workflow name'),
abstract_arg('events to dispatch'),
])
->abstract()
->set('workflow.marking_store.method', MethodMarkingStore::class)
->abstract()
->set('workflow.registry', Registry::class)
->alias(Registry::class, 'workflow.registry')
->set('workflow.security.expression_language', ExpressionLanguage::class)
;
};

View File

@@ -0,0 +1,29 @@
<?php
/*
* This file is part of the Symfony package.
*
* (c) Fabien Potencier <fabien@symfony.com>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace Symfony\Component\DependencyInjection\Loader\Configurator;
use Symfony\Component\Workflow\DataCollector\WorkflowDataCollector;
return static function (ContainerConfigurator $container) {
$container->services()
->set('data_collector.workflow', WorkflowDataCollector::class)
->tag('data_collector', [
'template' => '@WebProfiler/Collector/workflow.html.twig',
'id' => 'workflow',
])
->args([
tagged_iterator('workflow', 'name'),
service('event_dispatcher'),
service('debug.file_link_formatter'),
])
;
};