2024-05-06 20:40:05 +00:00
|
|
|
|
---
|
2024-10-30 17:04:36 +00:00
|
|
|
|
date: 20201117
|
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 it’s 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);
|
|
|
|
|
// ...
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
```
|