wiki/content/20201117112017-required.md

62 lines
1.3 KiB
Markdown
Raw Permalink Normal View History

2024-05-06 20:40:05 +00:00
---
2024-10-30 17:34:11 +00:00
date: 2020-11-17
2024-05-06 20:40:05 +00:00
id: 269a4976-5800-4914-b49e-4bf16dd64797
title: "@required"
---
# Description
When autowiring is enabled for a service, you can also configure the
container to call methods on your class when its instantiated. For
example, suppose you want to inject the `logger` service, and decide to
use setter-injection:
``` php
// src/Util/Rot13Transformer.php
namespace App\Util;
class Rot13Transformer
{
private $logger;
/**
* @required
*/
public function setLogger(LoggerInterface $logger)
{
$this->logger = $logger;
}
public function transform($value)
{
$this->logger->info('Transforming '.$value);
// ...
}
}
```
Autowiring will automatically call any method with the @required
annotation above it, autowiring each argument. If you need to manually
wire some of the arguments to a method, you can always explicitly
configure the method call.
Despite property injection has some drawbacks, autowiring with @required
annotation can also be applied to public typed properties:
``` php
namespace App\Util;
class Rot13Transformer
{
/** @required */
public LoggerInterface $logger;
public function transform($value)
{
$this->logger->info('Transforming '.$value);
// ...
}
}
```