core.services.yml 51.5 KB
Newer Older
1
parameters:
2
  session.storage.options: {}
3
  twig.config: {}
4 5
  renderer.config:
    required_cache_contexts: ['languages:language_interface', 'theme']
6 7 8 9
  factory.keyvalue:
    default: keyvalue.database
  factory.keyvalue.expirable:
    default: keyvalue.expirable.database
10
services:
11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
  # Simple cache contexts, directly derived from the request context.
  cache_context.ip:
    class: Drupal\Core\Cache\IpCacheContext
    arguments: ['@request_stack']
    tags:
      - { name: cache.context }
  cache_context.headers:
    class: Drupal\Core\Cache\HeadersCacheContext
    arguments: ['@request_stack']
    tags:
      - { name: cache.context }
  cache_context.cookies:
    class: Drupal\Core\Cache\CookiesCacheContext
    arguments: ['@request_stack']
    tags:
      - { name: cache.context }
  cache_context.request_format:
    class: Drupal\Core\Cache\RequestFormatCacheContext
    arguments: ['@request_stack']
    tags:
      - { name: cache.context }
32 33
  cache_context.url:
    class: Drupal\Core\Cache\UrlCacheContext
34
    arguments: ['@request_stack']
35
    tags:
36 37 38
      - { name: cache.context }
  cache_context.url.host:
    class: Drupal\Core\Cache\HostCacheContext
39
    arguments: ['@request_stack']
40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78
    tags:
      - { name: cache.context }
  cache_context.url.query_args:
    class: Drupal\Core\Cache\QueryArgsCacheContext
    arguments: ['@request_stack']
    tags:
      - { name: cache.context }
  cache_context.url.query_args.pagers:
    class: Drupal\Core\Cache\PagersCacheContext
    arguments: ['@request_stack']
    tags:
      - { name: cache.context }

  # Complex cache contexts, that depend on the routing system.
  cache_context.route:
    class: Drupal\Core\Cache\RouteCacheContext
    arguments: ['@current_route_match']
    tags:
      - { name: cache.context }
  cache_context.route.name:
    class: Drupal\Core\Cache\RouteNameCacheContext
    arguments: ['@current_route_match']
    tags:
      - { name: cache.context }
  cache_context.route.menu_active_trails:
    class: Drupal\Core\Cache\MenuActiveTrailsCacheContext
    calls:
      - [setContainer, ['@service_container']]
    tags:
      - { name: cache.context }

  # Complex cache contexts, that may be calculated from a combination of
  # multiple aspects of the request context plus additional logic. Hence they
  # are their own roots.
  cache_context.user:
    class: Drupal\Core\Cache\UserCacheContext
    arguments: ['@current_user']
    tags:
      - { name: cache.context}
79 80 81 82 83
  cache_context.user.permissions:
    class: Drupal\Core\Cache\AccountPermissionsCacheContext
    arguments: ['@current_user', '@user_permissions_hash_generator']
    tags:
      - { name: cache.context}
84 85 86
  cache_context.user.roles:
    class: Drupal\Core\Cache\UserRolesCacheContext
    arguments: ['@current_user']
87 88
    tags:
      - { name: cache.context}
89 90 91 92 93 94 95
  cache_context.user.is_super_user:
    class: Drupal\Core\Cache\IsSuperUserCacheContext
    arguments: ['@current_user']
    tags:
      - { name: cache.context}
  cache_context.languages:
    class: Drupal\Core\Cache\LanguagesCacheContext
96 97 98 99 100
    arguments: ['@language_manager']
    tags:
      - { name: cache.context}
  cache_context.theme:
    class: Drupal\Core\Cache\ThemeCacheContext
101
    arguments: ['@theme.manager']
102 103
    tags:
      - { name: cache.context}
104 105 106 107
  cache_context.timezone:
    class: Drupal\Core\Cache\TimeZoneCacheContext
    tags:
      - { name: cache.context}
108 109 110 111

  cache_factory:
    class: Drupal\Core\Cache\CacheFactory
    arguments: ['@settings', '%cache_default_bin_backends%']
112 113
    calls:
      - [setContainer, ['@service_container']]
114 115
  cache_contexts_manager:
    class: Drupal\Core\Cache\CacheContextsManager
116
    arguments: ['@service_container', '%cache_contexts%' ]
117 118 119 120 121 122 123 124 125 126 127 128
  cache_tags.invalidator:
    parent: container.trait
    class: Drupal\Core\Cache\CacheTagsInvalidator
    calls:
      - [setContainer, ['@service_container']]
    tags:
      - { name: service_collector, call: addInvalidator, tag: cache_tags_invalidator }
  cache_tags.invalidator.checksum:
    class: Drupal\Core\Cache\DatabaseCacheTagsChecksum
    arguments: ['@database']
    tags:
      - { name: cache_tags_invalidator}
129 130 131 132 133
  cache.backend.chainedfast:
    class: Drupal\Core\Cache\ChainedFastBackendFactory
    arguments: ['@settings']
    calls:
      - [setContainer, ['@service_container']]
134 135
  cache.backend.database:
    class: Drupal\Core\Cache\DatabaseBackendFactory
136
    arguments: ['@database', '@cache_tags.invalidator.checksum']
137 138
  cache.backend.apcu:
    class: Drupal\Core\Cache\ApcuBackendFactory
139
    arguments: ['@app.root', '@cache_tags.invalidator.checksum']
140 141
  cache.backend.php:
    class: Drupal\Core\Cache\PhpBackendFactory
142
    arguments: ['@cache_tags.invalidator.checksum']
143 144 145
  cache.bootstrap:
    class: Drupal\Core\Cache\CacheBackendInterface
    tags:
146
      - { name: cache.bin, default_backend: cache.backend.chainedfast }
147 148 149
    factory_method: get
    factory_service: cache_factory
    arguments: [bootstrap]
150 151 152
  cache.config:
    class: Drupal\Core\Cache\CacheBackendInterface
    tags:
153
      - { name: cache.bin, default_backend: cache.backend.chainedfast }
154 155 156
    factory_method: get
    factory_service: cache_factory
    arguments: [config]
157
  cache.default:
158 159 160 161 162
    class: Drupal\Core\Cache\CacheBackendInterface
    tags:
      - { name: cache.bin }
    factory_method: get
    factory_service: cache_factory
163
    arguments: [default]
164 165 166 167 168 169 170
  cache.entity:
    class: Drupal\Core\Cache\CacheBackendInterface
    tags:
      - { name: cache.bin }
    factory_method: get
    factory_service: cache_factory
    arguments: [entity]
171 172 173 174 175 176 177
  cache.menu:
    class: Drupal\Core\Cache\CacheBackendInterface
    tags:
      - { name: cache.bin }
    factory_method: get
    factory_service: cache_factory
    arguments: [menu]
178
  cache.render:
179 180 181 182 183
    class: Drupal\Core\Cache\CacheBackendInterface
    tags:
      - { name: cache.bin }
    factory_method: get
    factory_service: cache_factory
184 185
    arguments: [render]
  cache.data:
186 187 188 189 190
    class: Drupal\Core\Cache\CacheBackendInterface
    tags:
      - { name: cache.bin }
    factory_method: get
    factory_service: cache_factory
191
    arguments: [data]
192 193 194
  cache.discovery:
    class: Drupal\Core\Cache\CacheBackendInterface
    tags:
195
      - { name: cache.bin, default_backend: cache.backend.chainedfast }
196 197 198
    factory_method: get
    factory_service: cache_factory
    arguments: [discovery]
199 200 201 202
  cache_router_rebuild_subscriber:
    class: Drupal\Core\EventSubscriber\CacheRouterRebuildSubscriber
    tags:
      - { name: event_subscriber }
203 204
  page_cache_request_policy:
    class: Drupal\Core\PageCache\DefaultRequestPolicy
205
    arguments: ['@session_configuration']
206 207 208 209 210 211
    tags:
      - { name: service_collector, tag: page_cache_request_policy, call: addPolicy}
  page_cache_response_policy:
    class: Drupal\Core\PageCache\ChainResponsePolicy
    tags:
      - { name: service_collector, tag: page_cache_response_policy, call: addPolicy}
212
    lazy: true
213 214 215 216
  page_cache_kill_switch:
    class: Drupal\Core\PageCache\ResponsePolicy\KillSwitch
    tags:
      - { name: page_cache_response_policy }
217 218 219 220 221 222
  page_cache_no_cache_routes:
    class: Drupal\Core\PageCache\ResponsePolicy\DenyNoCacheRoutes
    arguments: ['@current_route_match']
    public: false
    tags:
      - { name: page_cache_response_policy }
223 224 225 226 227
  page_cache_no_server_error:
    class: Drupal\Core\PageCache\ResponsePolicy\NoServerError
    public: false
    tags:
      - { name: page_cache_response_policy }
228 229
  config.manager:
    class: Drupal\Core\Config\ConfigManager
230
    arguments: ['@entity.manager', '@config.factory', '@config.typed', '@string_translation', '@config.storage', '@event_dispatcher']
231 232 233
  config.factory:
    class: Drupal\Core\Config\ConfigFactory
    tags:
234
      - { name: event_subscriber }
235
      - { name: service_collector, tag: 'config.factory.override', call: addOverride }
236
    arguments: ['@config.storage', '@event_dispatcher', '@config.typed']
237 238
  config.installer:
    class: Drupal\Core\Config\ConfigInstaller
239
    arguments: ['@config.factory', '@config.storage', '@config.typed', '@config.manager', '@event_dispatcher']
240
    lazy: true
241
  config.storage:
242 243
    class: Drupal\Core\Config\CachedStorage
    arguments: ['@config.storage.active', '@cache.config']
244 245 246
  config.storage.active:
    class: Drupal\Core\Config\DatabaseStorage
    arguments: ['@database', 'config']
247
    public: false
248 249
    tags:
      - { name: backend_overridable }
250 251 252 253
  config.storage.file:
    class: Drupal\Core\Config\FileStorage
    factory_class: Drupal\Core\Config\FileStorageFactory
    factory_method: getActive
254
    public: false
255 256 257 258 259 260 261
  config.storage.staging:
    class: Drupal\Core\Config\FileStorage
    factory_class: Drupal\Core\Config\FileStorageFactory
    factory_method: getStaging
  config.storage.snapshot:
    class: Drupal\Core\Config\DatabaseStorage
    arguments: ['@database', config_snapshot]
262 263
    tags:
      - { name: backend_overridable }
264
  config.storage.schema:
265 266
    class: Drupal\Core\Config\ExtensionInstallStorage
    arguments: ['@config.storage', 'config/schema']
267 268
  config.typed:
    class: Drupal\Core\Config\TypedConfigManager
269 270 271
    arguments: ['@config.storage', '@config.storage.schema', '@cache.discovery', '@module_handler']
    tags:
      - { name: plugin_manager_cache_clear }
272 273 274
  context.handler:
    class: Drupal\Core\Plugin\Context\ContextHandler
    arguments: ['@typed_data_manager']
275 276
  cron:
    class: Drupal\Core\Cron
277
    arguments: ['@module_handler', '@lock', '@queue', '@state', '@account_switcher', '@logger.channel.cron', '@plugin.manager.queue_worker']
278
    lazy: true
279 280 281
  diff.formatter:
    class: Drupal\Core\Diff\DiffFormatter
    arguments: ['@config.factory']
282 283 284 285 286
  database:
    class: Drupal\Core\Database\Connection
    factory_class: Drupal\Core\Database\Database
    factory_method: getConnection
    arguments: [default]
287 288 289
  file_system:
    class: Drupal\Core\File\FileSystem
    arguments: ['@stream_wrapper_manager', '@settings', '@logger.channel.file']
290 291
  form_builder:
    class: Drupal\Core\Form\FormBuilder
292
    arguments: ['@form_validator', '@form_submitter', '@form_cache', '@module_handler', '@event_dispatcher', '@request_stack', '@class_resolver', '@element_info', '@theme.manager', '@?csrf_token']
293 294
  form_validator:
    class: Drupal\Core\Form\FormValidator
295
    arguments: ['@request_stack', '@string_translation', '@csrf_token', '@logger.channel.form']
296 297 298
  form_submitter:
    class: Drupal\Core\Form\FormSubmitter
    arguments: ['@request_stack', '@url_generator']
299 300
  form_cache:
    class: Drupal\Core\Form\FormCache
301
    arguments: ['@app.root', '@keyvalue.expirable', '@module_handler', '@current_user', '@csrf_token', '@logger.channel.form', '@request_stack', '@page_cache_request_policy']
302
    public: false  # Private to form_builder
303 304
  keyvalue:
    class: Drupal\Core\KeyValueStore\KeyValueFactory
305
    arguments: ['@service_container', '%factory.keyvalue%']
306 307
  keyvalue.database:
    class: Drupal\Core\KeyValueStore\KeyValueDatabaseFactory
308
    arguments: ['@serialization.phpserialize', '@database']
309 310
  keyvalue.expirable:
    class: Drupal\Core\KeyValueStore\KeyValueExpirableFactory
311
    arguments: ['@service_container', '%factory.keyvalue.expirable%']
312 313
  keyvalue.expirable.database:
    class: Drupal\Core\KeyValueStore\KeyValueDatabaseExpirableFactory
314
    arguments: ['@serialization.phpserialize', '@database']
315 316 317 318 319
  logger.factory:
    class: Drupal\Core\Logger\LoggerChannelFactory
    parent: container.trait
    tags:
      - { name: service_collector, tag: logger, call: addLogger }
320 321
  logger.channel_base:
    abstract: true
322 323 324
    class: Drupal\Core\Logger\LoggerChannel
    factory_method: get
    factory_service: logger.factory
325 326
  logger.channel.default:
    parent: logger.channel_base
327
    arguments: ['system']
328
  logger.channel.php:
329
    parent: logger.channel_base
330
    arguments: ['php']
331
  logger.channel.image:
332
    parent: logger.channel_base
333
    arguments: ['image']
334
  logger.channel.cron:
335
    parent: logger.channel_base
336
    arguments: ['cron']
337 338 339 340 341
  logger.channel.file:
    class: Drupal\Core\Logger\LoggerChannel
    factory_method: get
    factory_service: logger.factory
    arguments: ['file']
342
  logger.channel.form:
343
    parent: logger.channel_base
344
    arguments: ['form']
345 346
  logger.log_message_parser:
    class: Drupal\Core\Logger\LogMessageParser
347 348 349 350 351 352 353 354

  serialization.json:
    class: Drupal\Component\Serialization\Json
  serialization.phpserialize:
    class: Drupal\Component\Serialization\PhpSerialize
  serialization.yaml:
    class: Drupal\Component\Serialization\Yaml

355
  settings:
356 357
    class: Drupal\Core\Site\Settings
    factory_class: Drupal\Core\Site\Settings
358
    factory_method: getInstance
359
  state:
360
    class: Drupal\Core\State\State
361
    arguments: ['@keyvalue']
362 363 364 365 366 367 368 369 370 371 372 373
  queue:
    class: Drupal\Core\Queue\QueueFactory
    arguments: ['@settings']
    calls:
      - [setContainer, ['@service_container']]
  queue.database:
    class: Drupal\Core\Queue\QueueDatabaseFactory
    arguments: ['@database']
  path.alias_whitelist:
    class: Drupal\Core\Path\AliasWhitelist
    tags:
      - { name: needs_destruction }
374
    arguments: [path_alias_whitelist, '@cache.default', '@lock', '@state', '@path.alias_storage']
375 376
  path.alias_manager:
    class: Drupal\Core\Path\AliasManager
377
    arguments: ['@path.alias_storage', '@path.alias_whitelist', '@language_manager', '@cache.data']
378 379 380
  path.current:
    class: Drupal\Core\Path\CurrentPathStack
    arguments: ['@request_stack']
381
  http_client:
382
    class: Drupal\Core\Http\Client
383 384
    tags:
      - { name: service_collector, tag: http_client_subscriber, call: attach }
385 386
  theme.negotiator:
    class: Drupal\Core\Theme\ThemeNegotiator
387
    arguments: ['@access_check.theme']
388 389
    tags:
      - { name: service_collector, tag: theme_negotiator, call: addNegotiator }
390 391 392 393 394 395 396
  theme.negotiator.default:
    class: Drupal\Core\Theme\DefaultNegotiator
    arguments: ['@config.factory']
    tags:
      - { name: theme_negotiator, priority: -100 }
  theme.negotiator.ajax_base_page:
    class: Drupal\Core\Theme\AjaxBasePageNegotiator
397
    arguments: ['@csrf_token', '@config.factory', '@request_stack']
398 399
    tags:
      - { name: theme_negotiator, priority: 1000 }
400 401 402
  container.namespaces:
    class: ArrayObject
    arguments: [ '%container.namespaces%' ]
403 404 405 406
  container.trait:
    abstract: true
    calls:
      - [setContainer, ['@service_container']]
407 408
  default_plugin_manager:
    abstract: true
409
    arguments: ['@container.namespaces', '@cache.discovery', '@module_handler']
410
  module_handler:
411
    class: Drupal\Core\Extension\ModuleHandler
412 413 414
    arguments: ['@app.root', '%container.modules%', '@cache.bootstrap']
  module_installer:
    class: Drupal\Core\Extension\ModuleInstaller
415 416
    tags:
      - { name: service_collector, tag: 'module_install.uninstall_validator', call: addUninstallValidator }
417
    arguments: ['@app.root', '@module_handler', '@kernel']
418
    lazy: true
419 420 421 422
  content_uninstall_validator:
    class: Drupal\Core\Entity\ContentUninstallValidator
    tags:
      - { name: module_install.uninstall_validator }
423
    arguments: ['@entity.manager', '@string_translation']
424
    lazy: true
425 426 427 428
  field_uninstall_validator:
    class: Drupal\Core\Field\FieldModuleUninstallValidator
    tags:
      - { name: module_install.uninstall_validator }
429
    arguments: ['@entity.manager', '@string_translation']
430
    lazy: true
431 432
  theme_handler:
    class: Drupal\Core\Extension\ThemeHandler
433
    arguments: ['@app.root', '@config.factory', '@module_handler', '@state', '@info_parser', '@logger.channel.default', '@asset.css.collection_optimizer', '@config.installer', '@config.manager', '@router.builder']
434
  entity.manager:
435
    class: Drupal\Core\Entity\EntityManager
436
    arguments: ['@container.namespaces', '@module_handler', '@cache.discovery', '@language_manager', '@string_translation', '@class_resolver', '@typed_data_manager', '@entity.definitions.installed', '@event_dispatcher']
437
    parent: container.trait
438 439
    tags:
      - { name: plugin_manager_cache_clear }
440 441 442 443 444
  entity_route_subscriber:
    class: Drupal\Core\EventSubscriber\EntityRouteProviderSubscriber
    arguments: ['@entity.manager']
    tags:
      - { name: event_subscriber }
445 446 447 448 449 450 451 452
  entity.definitions.installed:
    class: Drupal\Core\KeyValueStore\KeyValueStoreInterface
    factory_method: get
    factory_service: keyvalue
    arguments: ['entity.definitions.installed']
  entity.definition_update_manager:
    class: Drupal\Core\Entity\EntityDefinitionUpdateManager
    arguments: ['@entity.manager']
453 454 455
  entity.form_builder:
    class: Drupal\Core\Entity\EntityFormBuilder
    arguments: ['@entity.manager', '@form_builder']
456 457 458 459 460
  entity.bundle_config_import_validator:
    class: Drupal\Core\Entity\Event\BundleConfigImportValidate
    arguments: ['@config.manager', '@entity.manager']
    tags:
      - { name: event_subscriber }
461 462 463
  entity.autocomplete_matcher:
    class: Drupal\Core\Entity\EntityAutocompleteMatcher
    arguments: ['@plugin.manager.entity_reference_selection']
464 465 466
  plugin.manager.entity_reference_selection:
    class: Drupal\Core\Entity\EntityReferenceSelection\SelectionPluginManager
    parent: default_plugin_manager
467 468 469
  plugin.manager.block:
    class: Drupal\Core\Block\BlockManager
    parent: default_plugin_manager
470 471
  plugin.manager.field.field_type:
    class: Drupal\Core\Field\FieldTypePluginManager
472
    arguments: ['@container.namespaces', '@cache.discovery', '@module_handler', '@typed_data_manager']
473 474
  plugin.manager.field.widget:
    class: Drupal\Core\Field\WidgetPluginManager
475
    arguments: ['@container.namespaces', '@cache.discovery', '@module_handler', '@plugin.manager.field.field_type']
476 477
  plugin.manager.field.formatter:
    class: Drupal\Core\Field\FormatterPluginManager
478
    arguments: ['@container.namespaces', '@cache.discovery', '@module_handler', '@plugin.manager.field.field_type']
479 480
  plugin.manager.archiver:
    class: Drupal\Core\Archiver\ArchiverManager
481
    parent: default_plugin_manager
482 483
  plugin.manager.action:
    class: Drupal\Core\Action\ActionManager
484
    arguments: ['@container.namespaces', '@cache.discovery', '@module_handler']
485 486 487
  plugin.manager.menu.link:
    class: Drupal\Core\Menu\MenuLinkManager
    arguments: ['@menu.tree_storage', '@menu_link.static.overrides', '@module_handler']
488 489
  menu.link_tree:
    class: Drupal\Core\Menu\MenuLinkTree
490
    arguments: ['@menu.tree_storage', '@plugin.manager.menu.link', '@router.route_provider', '@menu.active_trail', '@controller_resolver', '@cache.menu', '@current_route_match']
491 492
  menu.default_tree_manipulators:
    class: Drupal\Core\Menu\DefaultMenuLinkTreeManipulators
493
    arguments: ['@access_manager', '@current_user', '@entity.query']
494 495 496 497 498 499
  menu.active_trail:
    class: Drupal\Core\Menu\MenuActiveTrail
    arguments: ['@plugin.manager.menu.link', '@current_route_match']
  menu.parent_form_selector:
    class: Drupal\Core\Menu\MenuParentFormSelector
    arguments: ['@menu.link_tree', '@entity.manager', '@string_translation']
500 501
  plugin.manager.menu.local_action:
    class: Drupal\Core\Menu\LocalActionManager
502
    arguments: ['@controller_resolver', '@request_stack', '@current_route_match', '@router.route_provider', '@module_handler', '@cache.discovery', '@language_manager', '@access_manager', '@current_user']
503 504
  plugin.manager.menu.local_task:
    class: Drupal\Core\Menu\LocalTaskManager
505
    arguments: ['@controller_resolver', '@request_stack', '@current_route_match', '@router.route_provider', '@router.builder', '@module_handler', '@cache.discovery', '@language_manager', '@access_manager', '@current_user']
506 507
  plugin.manager.menu.contextual_link:
    class: Drupal\Core\Menu\ContextualLinkManager
508
    arguments: ['@controller_resolver', '@module_handler', '@cache.discovery', '@language_manager', '@access_manager', '@current_user', '@request_stack']
509 510 511
  plugin.manager.display_variant:
    class: Drupal\Core\Display\VariantManager
    parent: default_plugin_manager
512 513 514
  plugin.manager.queue_worker:
    class: Drupal\Core\Queue\QueueWorkerManager
    parent: default_plugin_manager
515 516
  plugin.cache_clearer:
    class: Drupal\Core\Plugin\CachedDiscoveryClearer
517
    lazy: true
518 519 520 521 522
  paramconverter.menu_link:
    class: Drupal\Core\ParamConverter\MenuLinkPluginConverter
    tags:
      - { name: paramconverter }
    arguments: ['@plugin.manager.menu.link']
523
    lazy: true
524 525
  menu.tree_storage:
    class: Drupal\Core\Menu\MenuTreeStorage
526
    arguments: ['@database', '@cache.menu', '@cache_tags.invalidator', 'menu_tree']
527
    public: false  # Private to plugin.manager.menu.link and menu.link_tree
528 529
    tags:
      - { name: backend_overridable }
530 531 532
  menu_link.static.overrides:
    class: Drupal\Core\Menu\StaticMenuLinkOverrides
    arguments: ['@config.factory']
533 534
  request_stack:
    class: Symfony\Component\HttpFoundation\RequestStack
535 536
    tags:
      - { name: persist }
537 538 539
  current_route_match:
     class: Drupal\Core\Routing\CurrentRouteMatch
     arguments: ['@request_stack']
540
  event_dispatcher:
541
    class: Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher
542
    arguments: ['@service_container']
543 544 545 546
  app.root:
    class: SplString
    factory_service: 'app.root.factory'
    factory_method: 'get'
547 548
    tags:
      - { name: parameter_service }
549 550 551
  app.root.factory:
    class: Drupal\Core\AppRootFactory
    arguments: ['@kernel']
552
    public: false
553
  controller_resolver:
554
    class: Drupal\Core\Controller\ControllerResolver
555
    arguments: ['@class_resolver']
556 557 558 559
  class_resolver:
    class: Drupal\Core\DependencyInjection\ClassResolver
    calls:
      - [setContainer, ['@service_container']]
560 561 562
  title_resolver:
    class: Drupal\Core\Controller\TitleResolver
    arguments: ['@controller_resolver', '@string_translation']
563
  http_kernel:
564
    class: Stack\StackedHttpKernel
565
  http_kernel.basic:
566
    class: Symfony\Component\HttpKernel\HttpKernel
567
    arguments: ['@event_dispatcher', '@controller_resolver', '@request_stack']
568 569 570 571 572 573 574 575 576 577 578 579
  http_negotiation.format_negotiator:
    class: Drupal\Core\ContentNegotiation
    private: true
  http_middleware.negotiation:
    class: Drupal\Core\StackMiddleware\NegotiationMiddleware
    arguments: ['@http_negotiation.format_negotiator']
    calls:
      - [registerFormat, ['drupal_ajax', ['application/vnd.drupal-ajax']]]
      - [registerFormat, ['drupal_dialog', ['application/vnd.drupal-dialog']]]
      - [registerFormat, ['drupal_modal', ['application/vnd.drupal-modal']]]
    tags:
      - { name: http_middleware, priority: 400 }
580 581 582 583 584 585 586 587 588 589
  http_middleware.reverse_proxy:
    class: Drupal\Core\StackMiddleware\ReverseProxyMiddleware
    arguments: ['@settings']
    tags:
      - { name: http_middleware, priority: 300 }
  http_middleware.kernel_pre_handle:
    class: Drupal\Core\StackMiddleware\KernelPreHandle
    arguments: ['@kernel']
    tags:
      - { name: http_middleware, priority: 100 }
590 591 592 593 594 595
  http_middleware.session:
    class: Drupal\Core\StackMiddleware\Session
    tags:
      - { name: http_middleware, priority: 50 }
    calls:
      - [setContainer, ['@service_container']]
596 597
  language_manager:
    class: Drupal\Core\Language\LanguageManager
598 599 600 601
    arguments: ['@language.default']
  language.default:
    class: Drupal\Core\Language\LanguageDefault
    arguments: ['%language.default_values%']
602 603
  string_translator.custom_strings:
    class: Drupal\Core\StringTranslation\Translator\CustomStrings
604
    arguments: ['@settings']
605 606 607 608
    tags:
      - { name: string_translator, priority: 30 }
  string_translation:
    class: Drupal\Core\StringTranslation\TranslationManager
609
    arguments: ['@language_manager', '@state']
610 611
    calls:
      - [initLanguageManager]
612 613
    tags:
      - { name: service_collector, tag: string_translator, call: addTranslator }
614
  database.replica:
615 616 617
    class: Drupal\Core\Database\Connection
    factory_class: Drupal\Core\Database\Database
    factory_method: getConnection
618
    arguments: [replica]
619
  typed_data_manager:
620
    class: Drupal\Core\TypedData\TypedDataManager
621
    arguments: ['@container.namespaces', '@cache.discovery', '@module_handler', '@class_resolver']
622 623
    calls:
      - [setValidationConstraintManager, ['@validation.constraint']]
624 625
    tags:
      - { name: plugin_manager_cache_clear }
626 627
  validation.constraint:
    class: Drupal\Core\Validation\ConstraintManager
628
    parent: default_plugin_manager
629 630
    tags:
      - { name: plugin_manager_cache_clear }
631 632
  lock:
    class: Drupal\Core\Lock\DatabaseLockBackend
633
    arguments: ['@database']
634 635
    tags:
      - { name: backend_overridable }
636
    lazy: true
637 638 639
  lock.persistent:
    class: Drupal\Core\Lock\PersistentDatabaseLockBackend
    arguments: ['@database']
640 641
    tags:
      - { name: backend_overridable }
642
    lazy: true
643
  router.request_context:
644
    class: Drupal\Core\Routing\RequestContext
645 646
    tags:
      - { name: persist }
647 648
    calls:
      - [fromRequestStack, ['@request_stack']]
649 650
  router.admin_context:
    class: Drupal\Core\Routing\AdminContext
651
    arguments: ['@current_route_match']
652 653
  router.route_provider:
    class: Drupal\Core\Routing\RouteProvider
654
    arguments: ['@database', '@state', '@path.current']
655 656
    tags:
      - { name: event_subscriber }
657
      - { name: backend_overridable }
658 659
  router.route_preloader:
    class: Drupal\Core\Routing\RoutePreloader
660
    arguments: ['@router.route_provider', '@state']
661 662
    tags:
      - { name: 'event_subscriber' }
663 664
  router.matcher.final_matcher:
    class: Drupal\Core\Routing\UrlMatcher
665
    arguments: ['@path.current']
666 667 668 669 670
  router.matcher:
    class: Symfony\Cmf\Component\Routing\NestedMatcher\NestedMatcher
    arguments: ['@router.route_provider']
    calls:
      - [setFinalMatcher, ['@router.matcher.final_matcher']]
671
    tags:
672 673 674 675 676 677 678 679 680 681 682
      - { name: service_collector, tag: non_lazy_route_filter, call: addRouteFilter }
  route_filter.lazy_collector:
    class: Drupal\Core\Routing\LazyRouteFilter
    tags:
      - { name: non_lazy_route_filter }
    parent: container.trait
  route_filter_subscriber:
    class: Drupal\Core\EventSubscriber\RouteFilterSubscriber
    arguments: ['@route_filter.lazy_collector']
    tags:
      - { name: event_subscriber }
683
  url_generator:
684
    class: Drupal\Core\Routing\UrlGenerator
685
    arguments: ['@router.route_provider', '@path_processor_manager', '@route_processor_manager', '@config.factory', '@request_stack']
686
    calls:
687
      - [setContext, ['@?router.request_context']]
688 689 690
  redirect.destination:
    class: Drupal\Core\Routing\RedirectDestination
    arguments: ['@request_stack', '@url_generator']
691 692
  unrouted_url_assembler:
    class: Drupal\Core\Utility\UnroutedUrlAssembler
693
    arguments: ['@request_stack', '@config.factory', '@path_processor_manager']
694 695
  link_generator:
    class: Drupal\Core\Utility\LinkGenerator
696
    arguments: ['@url_generator', '@module_handler']
697 698 699
  router:
    class: Drupal\Core\Routing\AccessAwareRouter
    arguments: ['@router.no_access_checks', '@access_manager', '@current_user']
700 701
  router.dynamic:
    class: Symfony\Cmf\Component\Routing\DynamicRouter
702
    arguments: ['@router.request_context', '@router.matcher', '@url_generator']
703
    tags:
704
      - { name: service_collector, tag: non_lazy_route_enhancer, call: addRouteEnhancer }
705
  router.no_access_checks:
706 707 708 709
    class: Symfony\Cmf\Component\Routing\ChainRouter
    calls:
      - [setContext, ['@router.request_context']]
      - [add, ['@router.dynamic']]
710 711 712 713 714
  router.path_roots_subscriber:
    class: Drupal\Core\EventSubscriber\PathRootsSubscriber
    arguments: ['@state']
    tags:
      - { name: event_subscriber }
715 716
  entity.query:
    class: Drupal\Core\Entity\Query\QueryFactory
717
    arguments: ['@entity.manager']
718 719 720 721
    calls:
      - [setContainer, ['@service_container']]
  entity.query.config:
    class: Drupal\Core\Config\Entity\Query\QueryFactory
722
    arguments: ['@config.factory']
723 724 725
  entity.query.sql:
    class: Drupal\Core\Entity\Query\Sql\QueryFactory
    arguments: ['@database']
726 727
    tags:
      - { name: backend_overridable }
728 729 730
  entity.query.keyvalue:
    class: Drupal\Core\Entity\KeyValueStore\Query\QueryFactory
    arguments: ['@keyvalue']
731 732
  router.dumper:
    class: Drupal\Core\Routing\MatcherDumper
733
    arguments: ['@database', '@state']
734 735
    tags:
      - { name: backend_overridable }
736
    lazy: true
737 738
  router.builder:
    class: Drupal\Core\Routing\RouteBuilder
739
    arguments: ['@router.dumper', '@lock', '@event_dispatcher', '@module_handler', '@controller_resolver', '@access_manager.check_provider']
740
    lazy: true
741
    tags:
742
      - { name: needs_destruction }
743 744 745
  menu.rebuild_subscriber:
    class: Drupal\Core\EventSubscriber\MenuRouterRebuildSubscriber
    arguments: ['@lock', '@plugin.manager.menu.link']
746 747
    tags:
      - { name: event_subscriber }
748 749
  path.alias_storage:
    class: Drupal\Core\Path\AliasStorage
750
    arguments: ['@database', '@module_handler']
751 752
    tags:
      - { name: backend_overridable }
753 754
  path.matcher:
    class: Drupal\Core\Path\PathMatcher
755
    arguments: ['@config.factory', '@current_route_match']
756 757
  path.validator:
    class: Drupal\Core\Path\PathValidator
758
    arguments: ['@router', '@router.no_access_checks', '@current_user', '@path_processor_manager']
759

760 761 762 763 764 765 766 767 768
# The argument to the hashing service defined in services.yml, to the
# constructor of PhpassHashedPassword is the log2 number of iterations for
# password stretching.
# @todo increase by 1 every Drupal version in order to counteract increases in
# the speed and power of computers available to crack the hashes. The current
# password hashing method was introduced in Drupal 7 with a log2 count of 15.
  password:
    class: Drupal\Core\Password\PhpassHashedPassword
    arguments: [16]
769 770 771 772 773 774
  accept_header_matcher:
    class: Drupal\Core\Routing\AcceptHeaderMatcher
    tags:
      - { name: route_filter }
  content_type_header_matcher:
    class: Drupal\Core\Routing\ContentTypeHeaderMatcher
775 776 777 778
    tags:
      - { name: route_filter }
  paramconverter_manager:
    class: Drupal\Core\ParamConverter\ParamConverterManager
779 780
    tags:
      - { name: service_collector, tag: paramconverter, call: addConverter }
781 782 783 784 785
  paramconverter_subscriber:
    class: Drupal\Core\EventSubscriber\ParamConverterSubscriber
    tags:
      - { name: event_subscriber }
    arguments: ['@paramconverter_manager']
786 787 788 789
  paramconverter.entity:
    class: Drupal\Core\ParamConverter\EntityConverter
    tags:
      - { name: paramconverter }
790
    arguments: ['@entity.manager']
791 792 793 794 795 796
  paramconverter.configentity_admin:
    class: Drupal\Core\ParamConverter\AdminPathConfigEntityConverter
    tags:
      # Use a higher priority than EntityConverter, see the class for details.
      - { name: paramconverter, priority: 5 }
    arguments: ['@entity.manager', '@config.factory', '@router.admin_context']
797
    lazy: true
798 799 800 801 802
  route_subscriber.module:
    class: Drupal\Core\EventSubscriber\ModuleRouteSubscriber
    tags:
      - { name: event_subscriber }
    arguments: ['@module_handler']
803 804
  resolver_manager.entity:
    class: Drupal\Core\Entity\EntityResolverManager
805
    arguments: ['@entity.manager', '@class_resolver']
806 807 808 809
  route_subscriber.entity:
    class: Drupal\Core\EventSubscriber\EntityRouteAlterSubscriber
    tags:
      - { name: event_subscriber }
810
    arguments: ['@resolver_manager.entity']
811 812
  ajax_subscriber:
    class: Drupal\Core\EventSubscriber\AjaxSubscriber
813 814
    tags:
      - { name: event_subscriber }
815 816 817 818 819 820 821 822 823 824
  route_enhancer.lazy_collector:
    class: Drupal\Core\Routing\LazyRouteEnhancer
    tags:
      - { name: non_lazy_route_enhancer, priority: 5000 }
    parent: container.trait
  route_enhancer_subscriber:
    class: Drupal\Core\EventSubscriber\RouteEnhancerSubscriber
    arguments: ['@route_enhancer.lazy_collector']
    tags:
      - { name: event_subscriber }
825 826 827 828 829 830
  route_enhancer.param_conversion:
    class: Drupal\Core\Routing\Enhancer\ParamConversionEnhancer
    arguments: ['@paramconverter_manager']
    tags:
      - { name: route_enhancer }
      - { name: event_subscriber }
831 832
  route_enhancer.entity:
    class: Drupal\Core\Entity\Enhancer\EntityRouteEnhancer
833
    tags:
834
      - { name: route_enhancer, priority: 20 }
835 836 837 838
  route_content_controller_subscriber:
    class: Drupal\Core\EventSubscriber\ContentControllerSubscriber
    tags:
      - { name: event_subscriber }
839 840 841 842
  route_special_attributes_subscriber:
    class: Drupal\Core\EventSubscriber\SpecialAttributesRouteSubscriber
    tags:
      - { name: event_subscriber }
843 844 845 846
  route_http_method_subscriber:
    class: Drupal\Core\EventSubscriber\RouteMethodSubscriber
    tags:
      - { name: event_subscriber }
847 848 849 850 851 852 853 854 855

  # Main content view subscriber plus the renderers it uses.
  main_content_view_subscriber:
    class: Drupal\Core\EventSubscriber\MainContentViewSubscriber
    arguments: ['@class_resolver', '@current_route_match', '%main_content_renderers%']
    tags:
      - { name: event_subscriber }
  main_content_renderer.html:
    class: Drupal\Core\Render\MainContent\HtmlRenderer
856
    arguments: ['@title_resolver', '@plugin.manager.display_variant', '@event_dispatcher', '@element_info', '@module_handler', '@renderer', '@cache_contexts_manager']
857 858 859 860 861 862 863
    tags:
      - { name: render.main_content_renderer, format: html }
  main_content_renderer.ajax:
    class: Drupal\Core\Render\MainContent\AjaxRenderer
    arguments: ['@element_info']
    tags:
      - { name: render.main_content_renderer, format: drupal_ajax }
864
      - { name: render.main_content_renderer, format: iframeupload }
865 866 867 868 869 870 871 872 873 874
  main_content_renderer.dialog:
    class: Drupal\Core\Render\MainContent\DialogRenderer
    arguments: ['@title_resolver']
    tags:
      - { name: render.main_content_renderer, format: drupal_dialog }
  main_content_renderer.modal:
    class: Drupal\Core\Render\MainContent\ModalRenderer
    arguments: ['@title_resolver']
    tags:
      - { name: render.main_content_renderer, format: drupal_modal }
875 876 877 878 879 880
  controller.form:
    class: Drupal\Core\Controller\HtmlFormController
    arguments: ['@controller_resolver', '@form_builder', '@class_resolver']
  controller.entity_form:
    class: Drupal\Core\Entity\HtmlEntityFormController
    arguments: ['@controller_resolver', '@form_builder', '@entity.manager']
881 882 883 884
  router_listener:
    class: Symfony\Component\HttpKernel\EventListener\RouterListener
    tags:
      - { name: event_subscriber }
885
    arguments: ['@router', '@router.request_context', NULL, '@request_stack']
886 887
  view_subscriber:
    class: Drupal\Core\EventSubscriber\ViewSubscriber
888
    arguments: ['@title_resolver']
889 890
    tags:
      - { name: event_subscriber }
891 892
  bare_html_page_renderer:
    class: Drupal\Core\Render\BareHtmlPageRenderer
893
    arguments: ['@renderer']
894
    lazy: true
895 896 897 898 899
  private_key:
    class: Drupal\Core\PrivateKey
    arguments: ['@state']
  csrf_token:
    class: Drupal\Core\Access\CsrfTokenGenerator
900
    arguments: ['@private_key', '@session_manager.metadata_bag']
901 902
  access_arguments_resolver_factory:
    class: Drupal\Core\Access\AccessArgumentsResolverFactory
903 904
  access_manager:
    class: Drupal\Core\Access\AccessManager
905 906 907
    arguments: ['@router.route_provider', '@paramconverter_manager', '@access_arguments_resolver_factory', '@current_user', '@access_manager.check_provider']
  access_manager.check_provider:
    class: Drupal\Core\Access\CheckProvider
908 909
    calls:
      - [setContainer, ['@service_container']]
910
    public: false
911 912 913
  access_check.default:
    class: Drupal\Core\Access\DefaultAccessCheck
    tags:
914
      - { name: access_check, applies_to: _access }
915 916 917
  access_check.entity:
    class: Drupal\Core\Entity\EntityAccessCheck
    tags:
918
      - { name: access_check, applies_to: _entity_access }
919 920
  access_check.entity_create:
    class: Drupal\Core\Entity\EntityCreateAccessCheck
921
    arguments: ['@entity.manager']
922
    tags:
923
      - { name: access_check, applies_to: _entity_create_access }
924 925
  access_check.theme:
    class: Drupal\Core\Theme\ThemeAccessCheck
926
    arguments: ['@theme_handler']
927
    tags:
928
      - { name: access_check, applies_to: _access_theme }
929 930
  access_check.custom:
    class: Drupal\Core\Access\CustomAccessCheck
931
    arguments: ['@controller_resolver', '@access_arguments_resolver_factory']
932
    tags:
933
      - { name: access_check, applies_to: _custom_access }
934 935 936
  access_check.csrf:
    class: Drupal\Core\Access\CsrfAccessCheck
    tags:
937
      - { name: access_check, applies_to: _csrf_token, needs_incoming_request: TRUE }
938
    arguments: ['@csrf_token']
939 940 941
  maintenance_mode:
    class: Drupal\Core\Site\MaintenanceMode
    arguments: ['@state', '@current_user']
942 943
  maintenance_mode_subscriber:
    class: Drupal\Core\EventSubscriber\MaintenanceModeSubscriber
944
    arguments: ['@maintenance_mode', '@config.factory', '@string_translation', '@url_generator', '@current_user', '@bare_html_page_renderer']
945 946 947 948 949 950
    tags:
      - { name: event_subscriber }
  path_subscriber:
    class: Drupal\Core\EventSubscriber\PathSubscriber
    tags:
      - { name: event_subscriber }
951
    arguments: ['@path.alias_manager', '@path_processor_manager', '@path.current']
952 953 954 955 956
  anonymous_user_response_subscriber:
    class: Drupal\Core\EventSubscriber\AnonymousUserResponseSubscriber
    tags:
      - { name: event_subscriber }
    arguments: ['@current_user']
957 958 959 960
  finish_response_subscriber:
    class: Drupal\Core\EventSubscriber\FinishResponseSubscriber
    tags:
      - { name: event_subscriber }
961
    arguments: ['@language_manager', '@config.factory', '@page_cache_request_policy', '@page_cache_response_policy', '@cache_contexts_manager']
962 963
  redirect_response_subscriber:
    class: Drupal\Core\EventSubscriber\RedirectResponseSubscriber
964
    arguments: ['@url_generator', '@router.request_context']
965 966
    tags:
      - { name: event_subscriber }
967 968 969 970 971
  request_close_subscriber:
    class: Drupal\Core\EventSubscriber\RequestCloseSubscriber
    tags:
      - { name: event_subscriber }
    arguments: ['@module_handler']
972 973 974 975 976 977 978 979
  config_import_subscriber:
    class: Drupal\Core\EventSubscriber\ConfigImportSubscriber
    tags:
      - { name: event_subscriber }
  config_snapshot_subscriber:
    class: Drupal\Core\EventSubscriber\ConfigSnapshotSubscriber
    tags:
      - { name: event_subscriber }
980
    arguments: ['@config.manager', '@config.storage', '@config.storage.snapshot']
981 982 983 984 985 986 987 988
  exception.default_json:
    class: Drupal\Core\EventSubscriber\ExceptionJsonSubscriber
    tags:
      - { name: event_subscriber }
  exception.default_html:
    class: Drupal\Core\EventSubscriber\DefaultExceptionHtmlSubscriber
    tags:
      - { name: event_subscriber }
989
    arguments: ['@http_kernel', '@logger.channel.php', '@redirect.destination']
990 991 992 993
  exception.default:
    class: Drupal\Core\EventSubscriber\DefaultExceptionSubscriber
    tags:
      - { name: event_subscriber }
994
    arguments: ['@config.factory', '@bare_html_page_renderer']
995 996 997 998 999 1000 1001 1002 1003 1004 1005 1006 1007 1008
  exception.logger:
    class: Drupal\Core\EventSubscriber\ExceptionLoggingSubscriber
    tags:
      - { name: event_subscriber }
    arguments: ['@logger.factory']
  exception.custom_page_json:
    class: Drupal\Core\EventSubscriber\ExceptionJsonSubscriber
    tags:
      - { name: event_subscriber }
    arguments: ['@config.factory', '@path.alias_manager', '@http_kernel']
  exception.custom_page_html:
    class: Drupal\Core\EventSubscriber\CustomPageExceptionHtmlSubscriber
    tags:
      - { name: event_subscriber }
1009
    arguments: ['@config.factory', '@path.alias_manager', '@http_kernel', '@logger.channel.php', '@redirect.destination']
1010 1011 1012 1013 1014 1015 1016
  exception.fast_404_html:
    class: Drupal\Core\EventSubscriber\Fast404ExceptionHtmlSubscriber
    tags:
      - { name: event_subscriber }
    arguments: ['@config.factory', '@http_kernel']
  exception.test_site:
    class: Drupal\Core\EventSubscriber\ExceptionTestSiteSubscriber
1017 1018
    tags:
      - { name: event_subscriber }
1019 1020 1021 1022
  exception.enforced_form_response:
    class: Drupal\Core\EventSubscriber\EnforcedFormResponseSubscriber
    tags:
      - { name: event_subscriber }
1023 1024
  route_processor_manager:
    class: Drupal\Core\RouteProcessor\RouteProcessorManager
1025 1026
    tags:
      - { name: service_collector, tag: route_processor_outbound, call: addOutbound }
1027 1028
  path_processor_manager:
    class: Drupal\Core\PathProcessor\PathProcessorManager
1029 1030 1031
    tags: