exposedHeaders: false
maxAge: false
supportsCredentials: false
+ tempstore.expire: 604800
services:
# Simple cache contexts, directly derived from the request context.
cache_context.ip:
- [setContainer, ['@service_container']]
cache.backend.database:
class: Drupal\Core\Cache\DatabaseBackendFactory
- arguments: ['@database', '@cache_tags.invalidator.checksum']
+ arguments: ['@database', '@cache_tags.invalidator.checksum', '@settings']
cache.backend.apcu:
class: Drupal\Core\Cache\ApcuBackendFactory
arguments: ['@app.root', '@site.path', '@cache_tags.invalidator.checksum']
arguments: ['@config.storage', 'config/schema', '', true, '%install_profile%']
config.typed:
class: Drupal\Core\Config\TypedConfigManager
- arguments: ['@config.storage', '@config.storage.schema', '@cache.discovery', '@module_handler']
+ arguments: ['@config.storage', '@config.storage.schema', '@cache.discovery', '@module_handler', '@class_resolver']
tags:
- { name: plugin_manager_cache_clear }
+ calls:
+ - [setValidationConstraintManager, ['@validation.constraint']]
context.handler:
class: Drupal\Core\Plugin\Context\ContextHandler
arguments: ['@typed_data_manager']
arguments: ['@service_container']
cron:
class: Drupal\Core\Cron
- arguments: ['@module_handler', '@lock', '@queue', '@state', '@account_switcher', '@logger.channel.cron', '@plugin.manager.queue_worker']
+ arguments: ['@module_handler', '@lock', '@queue', '@state', '@account_switcher', '@logger.channel.cron', '@plugin.manager.queue_worker', '@datetime.time']
lazy: true
diff.formatter:
class: Drupal\Core\Diff\DiffFormatter
factory: Drupal\Core\Site\Settings::getInstance
state:
class: Drupal\Core\State\State
- arguments: ['@keyvalue', '@cache.bootstrap', '@lock']
- tags:
- - { name: needs_destruction }
+ arguments: ['@keyvalue']
queue:
class: Drupal\Core\Queue\QueueFactory
arguments: ['@settings']
arguments: ['@app.root', '@module_handler', '@cache.discovery']
theme.negotiator:
class: Drupal\Core\Theme\ThemeNegotiator
- arguments: ['@access_check.theme']
+ arguments: ['@access_check.theme', '@class_resolver']
tags:
- - { name: service_collector, tag: theme_negotiator, call: addNegotiator }
+ - { name: service_id_collector, tag: theme_negotiator }
theme.negotiator.default:
class: Drupal\Core\Theme\DefaultNegotiator
arguments: ['@config.factory']
- { name: service_collector, tag: 'module_install.uninstall_validator', call: addUninstallValidator }
arguments: ['@app.root', '@module_handler', '@kernel', '@router.builder']
lazy: true
+ extension.list.module:
+ class: Drupal\Core\Extension\ModuleExtensionList
+ arguments: ['@app.root', 'module', '@cache.default', '@info_parser', '@module_handler', '@state', '@config.factory', '@extension.list.profile', '%install_profile%', '%container.modules%']
+ extension.list.profile:
+ class: Drupal\Core\Extension\ProfileExtensionList
+ arguments: ['@app.root', 'profile', '@cache.default', '@info_parser', '@module_handler', '@state', '%install_profile%']
content_uninstall_validator:
class: Drupal\Core\Entity\ContentUninstallValidator
tags:
- { name: module_install.uninstall_validator }
arguments: ['@entity.manager', '@string_translation']
lazy: true
- field_uninstall_validator:
- class: Drupal\Core\Field\FieldModuleUninstallValidator
- tags:
- - { name: module_install.uninstall_validator }
- arguments: ['@entity.manager', '@string_translation']
- lazy: true
required_module_uninstall_validator:
class: Drupal\Core\Extension\RequiredModuleUninstallValidator
tags:
# @todo Remove this tag in https://www.drupal.org/node/2549143.
tags:
- { name: plugin_manager_cache_clear }
+ entity.memory_cache:
+ class: Drupal\Core\Cache\MemoryCache\MemoryCache
entity_type.manager:
class: Drupal\Core\Entity\EntityTypeManager
arguments: ['@container.namespaces', '@module_handler', '@cache.discovery', '@string_translation', '@class_resolver']
- { name: event_subscriber }
entity.definition_update_manager:
class: Drupal\Core\Entity\EntityDefinitionUpdateManager
- arguments: ['@entity.manager']
+ arguments: ['@entity.manager', '@entity.last_installed_schema.repository']
entity.last_installed_schema.repository:
class: Drupal\Core\Entity\EntityLastInstalledSchemaRepository
arguments: ['@keyvalue']
+ entity_field.deleted_fields_repository:
+ class: Drupal\Core\Field\DeletedFieldsRepository
+ arguments: ['@state']
field_storage_definition.listener:
class: Drupal\Core\Field\FieldStorageDefinitionListener
- arguments: ['@entity_type.manager', '@event_dispatcher', '@entity.last_installed_schema.repository', '@entity_field.manager']
+ arguments: ['@entity_type.manager', '@event_dispatcher', '@entity.last_installed_schema.repository', '@entity_field.manager', '@entity_field.deleted_fields_repository']
field_definition.listener:
class: Drupal\Core\Field\FieldDefinitionListener
arguments: ['@entity_type.manager', '@entity_field.manager', '@keyvalue', '@cache.discovery']
plugin.manager.block:
class: Drupal\Core\Block\BlockManager
parent: default_plugin_manager
+ arguments: ['@logger.channel.default']
plugin.manager.field.field_type:
class: Drupal\Core\Field\FieldTypePluginManager
arguments: ['@container.namespaces', '@cache.discovery', '@module_handler', '@typed_data_manager']
arguments: ['@menu.link_tree', '@entity.manager', '@string_translation']
plugin.manager.menu.local_action:
class: Drupal\Core\Menu\LocalActionManager
- arguments: ['@controller_resolver', '@request_stack', '@current_route_match', '@router.route_provider', '@module_handler', '@cache.discovery', '@language_manager', '@access_manager', '@current_user']
+ arguments: ['@http_kernel.controller.argument_resolver', '@request_stack', '@current_route_match', '@router.route_provider', '@module_handler', '@cache.discovery', '@language_manager', '@access_manager', '@current_user']
plugin.manager.menu.local_task:
class: Drupal\Core\Menu\LocalTaskManager
- arguments: ['@controller_resolver', '@request_stack', '@current_route_match', '@router.route_provider', '@module_handler', '@cache.discovery', '@language_manager', '@access_manager', '@current_user']
+ arguments: ['@http_kernel.controller.argument_resolver', '@request_stack', '@current_route_match', '@router.route_provider', '@module_handler', '@cache.discovery', '@language_manager', '@access_manager', '@current_user']
plugin.manager.menu.contextual_link:
class: Drupal\Core\Menu\ContextualLinkManager
arguments: ['@controller_resolver', '@module_handler', '@cache.discovery', '@language_manager', '@access_manager', '@current_user', '@request_stack']
- [setContainer, ['@service_container']]
title_resolver:
class: Drupal\Core\Controller\TitleResolver
- arguments: ['@controller_resolver', '@string_translation']
+ arguments: ['@controller_resolver', '@string_translation', '@http_kernel.controller.argument_resolver']
http_kernel:
class: Stack\StackedHttpKernel
http_kernel.basic:
class: Symfony\Component\HttpKernel\HttpKernel
- arguments: ['@event_dispatcher', '@controller_resolver', '@request_stack']
+ arguments: ['@event_dispatcher', '@controller_resolver', '@request_stack', '@http_kernel.controller.argument_resolver']
+ http_kernel.controller.argument_resolver:
+ class: Symfony\Component\HttpKernel\Controller\ArgumentResolver
+ arguments: ['@http_kernel.controller.argument_metadata_factory', ['@argument_resolver.request_attribute', '@argument_resolver.raw_parameter', '@argument_resolver.request', '@argument_resolver.psr7_request', '@argument_resolver.route_match', '@argument_resolver.default']]
+ http_kernel.controller.argument_metadata_factory:
+ class: Symfony\Component\HttpKernel\ControllerMetadata\ArgumentMetadataFactory
+ public: false
+ argument_resolver.request_attribute:
+ class: Symfony\Component\HttpKernel\Controller\ArgumentResolver\RequestAttributeValueResolver
+ public: false
+ argument_resolver.raw_parameter:
+ class: Drupal\Core\Controller\ArgumentResolver\RawParameterValueResolver
+ public: false
+ argument_resolver.request:
+ class: Symfony\Component\HttpKernel\Controller\ArgumentResolver\RequestValueResolver
+ public: false
+ argument_resolver.psr7_request:
+ class: Drupal\Core\Controller\ArgumentResolver\Psr7RequestValueResolver
+ arguments: ['@psr7.http_message_factory']
+ public: false
+ argument_resolver.route_match:
+ class: Drupal\Core\Controller\ArgumentResolver\RouteMatchValueResolver
+ public: false
+ argument_resolver.default:
+ class: Symfony\Component\HttpKernel\Controller\ArgumentResolver\DefaultValueResolver
+ public: false
http_middleware.negotiation:
class: Drupal\Core\StackMiddleware\NegotiationMiddleware
tags:
arguments: ['@current_route_match']
router.route_provider:
class: Drupal\Core\Routing\RouteProvider
- arguments: ['@database', '@state', '@path.current', '@cache.data', '@path_processor_manager', '@cache_tags.invalidator']
+ arguments: ['@database', '@state', '@path.current', '@cache.data', '@path_processor_manager', '@cache_tags.invalidator', 'router', '@language_manager']
tags:
- { name: event_subscriber }
- { name: backend_overridable }
router.route_provider.lazy_builder:
class: Drupal\Core\Routing\RouteProviderLazyBuilder
arguments: ['@router.route_provider', '@router.builder']
+ tags:
+ - { name: event_subscriber }
router.route_preloader:
class: Drupal\Core\Routing\RoutePreloader
arguments: ['@router.route_provider', '@state', '@cache.bootstrap']
tags:
- { name: service_collector, tag: non_lazy_route_filter, call: addRouteFilter }
deprecated: The "%service_id%" service is deprecated. You should use the 'router.no_access_checks' service instead.
- 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 }
url_generator.non_bubbling:
class: Drupal\Core\Routing\UrlGenerator
arguments: ['@router.route_provider', '@path_processor_manager', '@route_processor_manager', '@request_stack', '%filter_protocols%']
class: \Drupal\Core\Routing\Router
arguments: ['@router.route_provider', '@path.current', '@url_generator']
tags:
+ # @todo Try to combine those tags together, see https://www.drupal.org/node/2915772.
- { name: service_collector, tag: non_lazy_route_enhancer, call: addRouteEnhancer }
+ - { name: service_collector, tag: route_enhancer, call: addRouteEnhancer }
- { name: service_collector, tag: non_lazy_route_filter, call: addRouteFilter }
+ - { name: service_collector, tag: route_filter, call: addRouteFilter }
calls:
- [setContext, ['@router.request_context']]
router.path_roots_subscriber:
arguments: ['@entity.manager']
calls:
- [setContainer, ['@service_container']]
+ deprecated: The "%service_id%" service is deprecated. Use the 'entity_type.manager' service to get an entity type's storage object and then call \Drupal\Core\Entity\EntityStorageInterface::getQuery() or \Drupal\Core\Entity\EntityStorageInterface::getAggregateQuery() instead. See https://www.drupal.org/node/2849874
entity.query.config:
class: Drupal\Core\Config\Entity\Query\QueryFactory
arguments: ['@config.factory', '@keyvalue', '@config.manager']
method_filter:
class: Drupal\Core\Routing\MethodFilter
tags:
- - { name: route_filter, priority: 1 }
+ # The HTTP method route filter must run very early: it removes any routes
+ # whose requirements do not allow the HTTP method of the current request.
+ # Throws a 405 if no routes match the current request's HTTP method.
+ # (If it runs before content_type_header_matcher, it can ensure that only
+ # receives routes which can have a Content-Type request header.)
+ - { name: route_filter, priority: 10 }
content_type_header_matcher:
class: Drupal\Core\Routing\ContentTypeHeaderMatcher
tags:
- - { name: route_filter }
+ # The Content-Type request header route filter must run early: it removes
+ # any routes whose requirements do not allow the Content-Type request
+ # header of the current request.
+ # Throws a 415 if no routes match the Content-Type request header of the
+ # current request, or if it has no Content-Type request header.
+ # Note it does nothing for GET requests.
+ - { name: route_filter, priority: 5 }
paramconverter_manager:
class: Drupal\Core\ParamConverter\ParamConverterManager
tags:
class: Drupal\Core\ParamConverter\EntityConverter
tags:
- { name: paramconverter }
- arguments: ['@entity.manager']
+ arguments: ['@entity.manager', '@language_manager']
paramconverter.entity_revision:
class: Drupal\Core\ParamConverter\EntityRevisionParamConverter
tags:
- { name: event_subscriber }
form_ajax_subscriber:
class: Drupal\Core\Form\EventSubscriber\FormAjaxSubscriber
- arguments: ['@form_ajax_response_builder', '@string_translation']
- tags:
- - { name: event_subscriber }
- 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']
+ arguments: ['@form_ajax_response_builder', '@string_translation', '@messenger']
tags:
- { name: event_subscriber }
route_enhancer.param_conversion:
class: Drupal\Core\Routing\Enhancer\ParamConversionEnhancer
arguments: ['@paramconverter_manager']
tags:
- - { name: route_enhancer }
+ - { name: route_enhancer, priority: 5000 }
- { name: event_subscriber }
route_enhancer.form:
class: Drupal\Core\Routing\Enhancer\FormRouteEnhancer
arguments: ['@class_resolver', '@current_route_match', '%main_content_renderers%']
tags:
- { name: event_subscriber }
- accept_negotiation_406:
- class: Drupal\Core\EventSubscriber\AcceptNegotiation406
+ renderer_non_html:
+ class: Drupal\Core\EventSubscriber\RenderArrayNonHtmlSubscriber
tags:
- { name: event_subscriber }
main_content_renderer.html:
arguments: ['@title_resolver']
tags:
- { name: render.main_content_renderer, format: drupal_dialog }
+ main_content_renderer.off_canvas:
+ class: Drupal\Core\Render\MainContent\OffCanvasRenderer
+ arguments: ['@title_resolver', '@renderer']
+ tags:
+ - { name: render.main_content_renderer, format: drupal_dialog.off_canvas }
+ main_content_renderer.off_canvas_top:
+ class: Drupal\Core\Render\MainContent\OffCanvasRenderer
+ arguments: ['@title_resolver', '@renderer', 'top']
+ tags:
+ - { name: render.main_content_renderer, format: drupal_dialog.off_canvas_top }
main_content_renderer.modal:
class: Drupal\Core\Render\MainContent\ModalRenderer
arguments: ['@title_resolver']
- { name: render.main_content_renderer, format: drupal_modal }
controller.form:
class: Drupal\Core\Controller\HtmlFormController
- arguments: ['@controller_resolver', '@form_builder', '@class_resolver']
+ arguments: ['@http_kernel.controller.argument_resolver', '@form_builder', '@class_resolver']
controller.entity_form:
class: Drupal\Core\Entity\HtmlEntityFormController
- arguments: ['@controller_resolver', '@form_builder', '@entity.manager']
+ arguments: ['@http_kernel.controller.argument_resolver', '@form_builder', '@entity.manager']
form_ajax_response_builder:
class: Drupal\Core\Form\FormAjaxResponseBuilder
arguments: ['@main_content_renderer.ajax', '@current_route_match']
arguments: ['@entity_type.manager', '@entity_type.bundle.info']
tags:
- { name: access_check, applies_to: _entity_create_any_access }
+ access_check.entity_delete_multiple:
+ class: Drupal\Core\Entity\EntityDeleteMultipleAccessCheck
+ arguments: ['@entity_type.manager', '@tempstore.private', '@request_stack']
+ tags:
+ - { name: access_check, applies_to: _entity_delete_multiple_access }
access_check.theme:
class: Drupal\Core\Theme\ThemeAccessCheck
arguments: ['@theme_handler']
class: Drupal\Core\Access\CsrfRequestHeaderAccessCheck
arguments: ['@session_configuration', '@csrf_token']
tags:
- - { name: access_check }
+ - { name: access_check, needs_incoming_request: TRUE }
maintenance_mode:
class: Drupal\Core\Site\MaintenanceMode
arguments: ['@state', '@current_user']
maintenance_mode_subscriber:
class: Drupal\Core\EventSubscriber\MaintenanceModeSubscriber
- arguments: ['@maintenance_mode', '@config.factory', '@string_translation', '@url_generator', '@current_user', '@bare_html_page_renderer']
+ arguments: ['@maintenance_mode', '@config.factory', '@string_translation', '@url_generator', '@current_user', '@bare_html_page_renderer', '@messenger']
tags:
- { name: event_subscriber }
path_subscriber:
tags:
- { name: event_subscriber }
arguments: ['@http_kernel', '@logger.channel.php', '@redirect.destination', '@router.no_access_checks']
- exception.default:
- class: Drupal\Core\EventSubscriber\DefaultExceptionSubscriber
+ exception.final:
+ class: Drupal\Core\EventSubscriber\FinalExceptionSubscriber
tags:
- { name: event_subscriber }
arguments: ['@config.factory']
class: Drupal\Component\Bridge\ZfExtensionManagerSfContainer
calls:
- [setContainer, ['@service_container']]
+ - [setStandalone, ['\Zend\Feed\Reader\StandaloneExtensionManager']]
arguments: ['feed.reader.']
feed.bridge.writer:
class: Drupal\Component\Bridge\ZfExtensionManagerSfContainer
calls:
- [setContainer, ['@service_container']]
+ - [setStandalone, ['\Zend\Feed\Writer\StandaloneExtensionManager']]
arguments: ['feed.writer.']
# Zend Feed reader plugins. Plugin instances should not be shared.
feed.reader.dublincoreentry:
- { name: service_collector, tag: twig.loader, call: addLoader, required: TRUE }
twig.loader.filesystem:
class: Drupal\Core\Template\Loader\FilesystemLoader
- arguments: ['@app.root', '@module_handler', '@theme_handler']
+ # We use '.' instead of '@app.root' as the path for non-namespaced template
+ # files so that they match the relative paths of templates loaded via the
+ # theme registry or via Twig namespaces.
+ arguments: ['.', '@module_handler', '@theme_handler']
tags:
- { name: twig.loader, priority: 100 }
twig.loader.theme_registry:
arguments: ['@controller_resolver', '@theme.manager', '@plugin.manager.element_info', '@render_placeholder_generator', '@render_cache', '@request_stack', '%renderer.config%']
early_rendering_controller_wrapper_subscriber:
class: Drupal\Core\EventSubscriber\EarlyRenderingControllerWrapperSubscriber
- arguments: ['@controller_resolver', '@renderer']
+ arguments: ['@http_kernel.controller.argument_resolver', '@renderer']
tags:
- { name: event_subscriber }
# Placeholder strategies for rendering placeholders.
class: Drupal\Core\EventSubscriber\RssResponseRelativeUrlFilter
tags:
- { name: event_subscriber }
+ messenger:
+ class: Drupal\Core\Messenger\Messenger
+ arguments: ['@session.flash_bag', '@page_cache_kill_switch']
+ tempstore.private:
+ class: Drupal\Core\TempStore\PrivateTempStoreFactory
+ arguments: ['@keyvalue.expirable', '@lock', '@current_user', '@request_stack', '%tempstore.expire%']
+ tags:
+ - { name: backend_overridable }
+ tempstore.shared:
+ class: Drupal\Core\TempStore\SharedTempStoreFactory
+ arguments: ['@keyvalue.expirable', '@lock', '@request_stack', '%tempstore.expire%']
+ tags:
+ - { name: backend_overridable }