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,
) {}
// ...
}
What a Symfony developer should know about the framework: News, Jobs, Tweets, Events, Videos,...