- Remove
#[MapDecorated]
, use#[AutowireDecorated]
instead - Remove
ProxyHelper
, useSymfony\Component\VarExporter\ProxyHelper
instead - Remove
ReferenceSetArgumentTrait
- Remove support of
@required
annotation, use theSymfony\Contracts\Service\Attribute\Required
attribute instead - Require explicit argument when calling
ContainerAwareTrait::setContainer()
- Remove
PhpDumper
optionsinline_factories_parameter
andinline_class_loader_parameter
, use optionsinline_factories
andinline_class_loader
instead - Parameter names of
ParameterBag
cannot be numerics - Remove
ContainerAwareInterface
andContainerAwareTrait
, use dependency injection instead - Add argument
$id
and$asGhostObject
toDumperInterface::isProxyCandidate()
andgetProxyCode()
- Add argument
$source
toFileLoader::registerClasses()
- Allow using
#[Target]
with no arguments to state that a parameter must match a named autowiring alias - Deprecate
ContainerAwareInterface
andContainerAwareTrait
, use dependency injection instead - Add
defined
env var processor that returnstrue
for defined and neither null nor empty env vars - Add
#[AutowireLocator]
and#[AutowireIterator]
attributes
- Add options
inline_factories
andinline_class_loader
toPhpDumper::dump()
- Deprecate
PhpDumper
optionsinline_factories_parameter
andinline_class_loader_parameter
- Add
RemoveBuildParametersPass
, which removes parameters starting with a dot during compilation - Add support for nesting autowiring-related attributes into
#[Autowire(...)]
- Deprecate undefined and numeric keys with
service_locator
config - Fail if Target attribute does not exist during compilation
- Enable deprecating parameters with
ContainerBuilder::deprecateParameter()
- Add
#[AsAlias]
attribute to tell under which alias a service should be registered or to use the implemented interface if no parameter is given - Allow to trim XML service parameters value by using
trim="true"
attribute - Allow extending the
Autowire
attribute - Add
#[Exclude]
to skip autoregistering a class - Add support for generating lazy closures
- Add support for autowiring services as closures using
#[AutowireCallable]
or#[AutowireServiceClosure]
- Add support for
#[Autowire(lazy: true|class-string)]
- Make it possible to cast callables into single-method interfaces
- Deprecate
#[MapDecorated]
, use#[AutowireDecorated]
instead - Deprecate the
@required
annotation, use theSymfony\Contracts\Service\Attribute\Required
attribute instead - Add
constructor
option to services declaration and to#[Autoconfigure]
- Use lazy-loading ghost objects and virtual proxies out of the box
- Add arguments
&$asGhostObject
and$id
to LazyProxy'sDumperInterface
to allow using ghost objects for lazy loading services - Add
enum
env var processor - Add
shuffle
env var processor - Allow #[When] to be extended
- Change the signature of
ContainerAwareInterface::setContainer()
tosetContainer(?ContainerInterface)
- Deprecate calling
ContainerAwareTrait::setContainer()
without arguments - Deprecate using numeric parameter names
- Add support for tagged iterators/locators
exclude
option to the xml and yaml loaders/dumpers - Allow injecting
string $env
into php config closures - Add
excludeSelf
parameter toTaggedIteratorArgument
with default value totrue
to control whether the referencing service should be automatically excluded from the iterator
- Add
#[MapDecorated]
attribute telling to which parameter the decorated service should be mapped in a decorator - Add
#[AsDecorator]
attribute to make a service decorates another - Add
$exclude
toTaggedIterator
andTaggedLocator
attributes - Add
$exclude
totagged_iterator
andtagged_locator
configurator - Add an
env
function to the expression language provider - Add an
Autowire
attribute to tell a parameter how to be autowired - Allow using expressions as service factories
- Add argument type
closure
to help passing closures to services - Deprecate
ReferenceSetArgumentTrait
- Add
AbstractExtension
class for DI configuration/definition on a single file
- Remove
Definition::setPrivate()
andAlias::setPrivate()
, usesetPublic()
instead - Remove
inline()
in favor ofinline_service()
andref()
in favor ofservice()
when using the PHP-DSL - Remove
Definition::getDeprecationMessage()
, useDefinition::getDeprecation()
instead - Remove
Alias::getDeprecationMessage()
, useAlias::getDeprecation()
instead - Remove the
Psr\Container\ContainerInterface
andSymfony\Component\DependencyInjection\ContainerInterface
aliases of theservice_container
service
- Add
$defaultIndexMethod
and$defaultPriorityMethod
toTaggedIterator
andTaggedLocator
attributes - Add
service_closure()
to the PHP-DSL - Add support for autoconfigurable attributes on methods, properties and parameters
- Make auto-aliases private by default
- Add support for autowiring union and intersection types
- Add
ServicesConfigurator::remove()
in the PHP-DSL - Add
%env(not:...)%
processor to negate boolean values - Add support for loading autoconfiguration rules via the
#[Autoconfigure]
and#[AutoconfigureTag]
attributes on PHP 8 - Add
#[AsTaggedItem]
attribute for defining the index and priority of classes found in tagged iterators/locators - Add autoconfigurable attributes
- Add support for autowiring tagged iterators and locators via attributes on PHP 8
- Add support for per-env configuration in XML and Yaml loaders
- Add
ContainerBuilder::willBeAvailable()
to help with conditional configuration - Add support an integer return value for default_index_method
- Add
#[When(env: 'foo')]
to skip autoregistering a class when the env doesn't match - Add
env()
andEnvConfigurator
in the PHP-DSL - Add support for
ConfigBuilder
in thePhpFileLoader
- Add
ContainerConfigurator::env()
to get the current environment - Add
#[Target]
to tell how a dependency is used and hint named autowiring aliases
- added
param()
andabstract_arg()
in the PHP-DSL - deprecated
Definition::setPrivate()
andAlias::setPrivate()
, usesetPublic()
instead - added support for the
#[Required]
attribute
- deprecated
inline()
in favor ofinline_service()
andref()
in favor ofservice()
when using the PHP-DSL - allow decorators to reference their decorated service using the special
.inner
id - added support to autowire public typed properties in php 7.4
- added support for defining method calls, a configurator, and property setters in
InlineServiceConfigurator
- added possibility to define abstract service arguments
- allowed mixing "parent" and instanceof-conditionals/defaults/bindings
- updated the signature of method
Definition::setDeprecated()
toDefinition::setDeprecation(string $package, string $version, string $message)
- updated the signature of method
Alias::setDeprecated()
toAlias::setDeprecation(string $package, string $version, string $message)
- updated the signature of method
DeprecateTrait::deprecate()
toDeprecateTrait::deprecation(string $package, string $version, string $message)
- deprecated the
Psr\Container\ContainerInterface
andSymfony\Component\DependencyInjection\ContainerInterface
aliases of theservice_container
service, configure them explicitly instead - added class
Symfony\Component\DependencyInjection\Dumper\Preloader
to help with preloading on PHP 7.4+ - added tags
container.preload
/.no_preload
to declare extra classes to preload/services to not preload - allowed loading and dumping tags with an attribute named "name"
- deprecated
Definition::getDeprecationMessage()
, useDefinition::getDeprecation()
instead - deprecated
Alias::getDeprecationMessage()
, useAlias::getDeprecation()
instead - added support of PHP8 static return type for withers
- added
AliasDeprecatedPublicServicesPass
to deprecate public services to private
- removed support for auto-discovered extension configuration class which does not implement
ConfigurationInterface
- removed support for non-string default env() parameters
- moved
ServiceSubscriberInterface
to theSymfony\Contracts\Service
namespace - removed
RepeatedPass
andRepeatablePassInterface
- removed support for short factory/configurator syntax from
YamlFileLoader
- removed
ResettableContainerInterface
, useResetInterface
instead - added argument
$returnsClone
toDefinition::addMethodCall()
- removed
tagged
, usetagged_iterator
instead
- added
CheckTypeDeclarationsPass
to check injected parameters type during compilation - added support for opcache.preload by generating a preloading script in the cache folder
- added support for dumping the container in one file instead of many files
- deprecated support for short factories and short configurators in Yaml
- added
tagged_iterator
alias fortagged
which might be deprecated in a future version - deprecated passing an instance of
Symfony\Component\DependencyInjection\Parameter
as class name toSymfony\Component\DependencyInjection\Definition
- added support for binding iterable and tagged services
- made singly-implemented interfaces detection be scoped by file
- added ability to define a static priority method for tagged service
- added support for improved syntax to define method calls in Yaml
- made the
%env(base64:...)%
processor able to decode base64url - added ability to choose behavior of decorations on non existent decorated services
- added
%env(trim:...)%
processor to trim a string value - added
%env(default:param_name:...)%
processor to fallback to a parameter or to null when using%env(default::...)%
- added
%env(url:...)%
processor to convert a URL or DNS into an array of components - added
%env(query_string:...)%
processor to convert a query string into an array of key values - added support for deprecating aliases
- made
ContainerParametersResource
final and not implementSerializable
anymore - added
ReverseContainer
: a container that turns services back to their ids - added ability to define an index for a tagged collection
- added ability to define an index for services in an injected service locator argument
- made
ServiceLocator
implementServiceProviderInterface
- deprecated support for non-string default env() parameters
- added
%env(require:...)%
processor torequire()
a PHP file and use the value returned from it
- added
ContainerBuilder::registerAliasForArgument()
to support autowiring by type+name - added support for binding by type+name
- added
ServiceSubscriberTrait
to ease implementingServiceSubscriberInterface
using methods' return types - added
ServiceLocatorArgument
and!service_locator
config tag for creating optimized service-locators - added support for autoconfiguring bindings
- added
%env(key:...)%
processor to fetch a specific key from an array - deprecated
ServiceSubscriberInterface
, use the same interface from theSymfony\Contracts\Service
namespace instead - deprecated
ResettableContainerInterface
, useSymfony\Contracts\Service\ResetInterface
instead
- added support for variadics in named arguments
- added PSR-11
ContainerBagInterface
and itsContainerBag
implementation to access parameters as-a-service - added support for service's decorators autowiring
- deprecated the
TypedReference::canBeAutoregistered()
andTypedReference::getRequiringClass()
methods - environment variables are validated when used in extension configuration
- deprecated support for auto-discovered extension configuration class which does not implement
ConfigurationInterface
-
Relying on service auto-registration while autowiring is not supported anymore. Explicitly inject your dependencies or create services whose ids are their fully-qualified class name.
Before:
namespace App\Controller; use App\Mailer; class DefaultController { public function __construct(Mailer $mailer) { // ... } // ... }
services: App\Controller\DefaultController: autowire: true
After:
// same PHP code
services: App\Controller\DefaultController: autowire: true # or # App\Controller\DefaultController: # arguments: { $mailer: "@App\Mailer" } App\Mailer: autowire: true
-
removed autowiring services based on the types they implement
-
added a third
$methodName
argument to thegetProxyFactoryCode()
method of theDumperInterface
-
removed support for autowiring types
-
removed
Container::isFrozen
-
removed support for dumping an ucompiled container in
PhpDumper
-
removed support for generating a dumped
Container
without populating the method map -
removed support for case insensitive service identifiers
-
removed the
DefinitionDecorator
class, replaced byChildDefinition
-
removed the
AutowireServiceResource
class and relatedAutowirePass::createResourceForClass()
method -
removed
LoggingFormatter
,Compiler::getLoggingFormatter()
andaddLogMessage()
class and methods, use theContainerBuilder::log()
method instead -
removed
FactoryReturnTypePass
-
removed
ContainerBuilder::addClassResource()
, use theaddObjectResource()
or thegetReflectionClass()
method instead. -
removed support for top-level anonymous services
-
removed silent behavior for unused attributes and elements
-
removed support for setting and accessing private services in
Container
-
removed support for setting pre-defined services in
Container
-
removed support for case insensitivity of parameter names
-
removed
AutowireExceptionPass
andAutowirePass::getAutowiringExceptions()
, useDefinition::addError()
and theDefinitionErrorExceptionPass
instead
- moved the
ExtensionCompilerPass
to before-optimization passes with priority -1000 - deprecated "public-by-default" definitions and aliases, the new default will be "private" in 4.0
- added
EnvVarProcessorInterface
and corresponding "container.env_var_processor" tag for processing env vars - added support for ignore-on-uninitialized references
- deprecated service auto-registration while autowiring
- deprecated the ability to check for the initialization of a private service with the
Container::initialized()
method - deprecated support for top-level anonymous services in XML
- deprecated case insensitivity of parameter names
- deprecated the
ResolveDefinitionTemplatesPass
class in favor ofResolveChildDefinitionsPass
- added
TaggedIteratorArgument
with YAML (!tagged foo
) and XML (<service type="tagged"/>
) support - deprecated
AutowireExceptionPass
andAutowirePass::getAutowiringExceptions()
, useDefinition::addError()
and theDefinitionErrorExceptionPass
instead
- deprecated autowiring services based on the types they implement; rename (or alias) your services to their FQCN id to make them autowirable
- added "ServiceSubscriberInterface" - to allow for per-class explicit service-locator definitions
- added "container.service_locator" tag for defining service-locator services
- added anonymous services support in YAML configuration files using the
!service
tag. - added "TypedReference" and "ServiceClosureArgument" for creating service-locator services
- added
ServiceLocator
- a PSR-11 container holding a set of services to be lazily loaded - added "instanceof" section for local interface-defined configs
- added prototype services for PSR4-based discovery and registration
- added
ContainerBuilder::getReflectionClass()
for retrieving and tracking reflection class info - deprecated
ContainerBuilder::getClassResource()
, useContainerBuilder::getReflectionClass()
orContainerBuilder::addObjectResource()
instead - added
ContainerBuilder::fileExists()
for checking and tracking file or directory existence - deprecated autowiring-types, use aliases instead
- added support for omitting the factory class name in a service definition if the definition class is set
- deprecated case insensitivity of service identifiers
- added "iterator" argument type for lazy iteration over a set of values and services
- added file-wide configurable defaults for service attributes "public", "tags", "autowire" and "autoconfigure"
- made the "class" attribute optional, using the "id" as fallback
- using the
PhpDumper
with an uncompiledContainerBuilder
is deprecated and will not be supported anymore in 4.0 - deprecated the
DefinitionDecorator
class in favor ofChildDefinition
- allow config files to be loaded using a glob pattern
- [BC BREAK] the
NullDumper
class is now final
- allowed to prioritize compiler passes by introducing a third argument to
PassConfig::addPass()
, toCompiler::addPass
and toContainerBuilder::addCompilerPass()
- added support for PHP constants in YAML configuration files
- deprecated the ability to set or unset a private service with the
Container::set()
method - deprecated the ability to check for the existence of a private service with the
Container::has()
method - deprecated the ability to request a private service with the
Container::get()
method - deprecated support for generating a dumped
Container
without populating the method map
- removed all deprecated codes from 2.x versions
- deprecated the abstract ContainerAware class in favor of ContainerAwareTrait
- deprecated IntrospectableContainerInterface, to be merged with ContainerInterface in 3.0
- allowed specifying a directory to recursively load all configuration files it contains
- deprecated the concept of scopes
- added
Definition::setShared()
andDefinition::isShared()
- added ResettableContainerInterface to be able to reset the container to release memory on shutdown
- added a way to define the priority of service decoration
- added support for service autowiring
- deprecated synchronized services
- added new factory syntax and deprecated the old one
- added DecoratorServicePass and a way to override a service definition (Definition::setDecoratedService())
- deprecated SimpleXMLElement class.
- added support for expressions in service definitions
- added ContainerAwareTrait to add default container aware behavior to a class
- added Extension::isConfigEnabled() to ease working with enableable configurations
- added an Extension base class with sensible defaults to be used in conjunction with the Config component.
- added PrependExtensionInterface (to be able to allow extensions to prepend application configuration settings for any Bundle)
- added IntrospectableContainerInterface (to be able to check if a service has been initialized or not)
- added ConfigurationExtensionInterface
- added Definition::clearTag()
- component exceptions that inherit base SPL classes are now used exclusively (this includes dumped containers)
- [BC BREAK] fixed unescaping of class arguments, method ParameterBag::unescapeValue() was made public