Symfony News

New in Symfony 6.1: Service Autowiring Attributes

Kevin Bond

Contributed by
Kevin Bond
in #45657 and #45783.

PHP attributes are arguably one of the new PHP features with more positive impact on how we develop applications. Attributes add structured, machine-readable metadata information in code. In Symfony we added support for them in:

In Symfony 6.1 we're introducing another feature related to attributes so you can configure service autowiring with PHP attributes. In practice, this means that you can optionally not add any YAML/XML/PHP service configuration in config/ and configure your services directly in your code stored in src/.

To do so, use the new #[Autowire] attribute in the constructor arguments of your services (or in the arguments of any controller method):

use Symfony\Component\DependencyInjection\Attribute\Autowire;

class MyService
{
    public function __construct(
        #[Autowire(service: 'some_service')]
        private $service1,

        #[Autowire(expression: 'service("App\\Mail\\MailerConfiguration").getMailerMethod()')
        private $service2,

        #[Autowire(value: '%env(json:file:resolve:AUTH_FILE)%')]
        private $parameter1,

        #[Autowire(value: '%kernel.project_dir%/config/dir')]
        private $parameter2,
    ) {}

    // ...
}

In addition to the named arguments (service:, expression:, value:) you can also use the well-known service syntax used in Symfony's YAML config (@ for services and @= for expressions):

use Symfony\Component\DependencyInjection\Attribute\Autowire;

class MyService
{
    public function __construct(
        #[Autowire('@some_service')]
        private $service1,

        #[Autowire('@=service("App\\Mail\\MailerConfiguration").getMailerMethod()')
        private $service2,

        #[Autowire('%env(json:file:resolve:AUTH_FILE)%')]
        private $parameter1,
    ) {}

    // ...
}

Sponsor the Symfony project.


About us

What a Symfony developer should know about the framework: News, Jobs, Tweets, Events, Videos,...

Resources

Find us on Twitter

Find us on Facebook