Как мне получить автоматическую разводку для работы в symfony / зависимость-инъекция?

У меня есть пара примеров классов в пространстве имен DiTest;

namespace DiTest;

class Transport
{
public function send($mail)
{
echo $mail . PHP_EOL;
echo 'Mail Sent';
}
}

class Mailer
{
protected $transport;

public function __construct(Transport $transport)
{
$this->transport = $transport;
}

public function send($mail)
{
if ($this->transport) {
$this->transport->send($mail);
} else {
echo 'No transport set!' . PHP_EOL;
}
}
}

Тогда у меня есть этот файл конфигурации yaml;

services:
transport:
class: DiTest\Transport
mailer:
class: DiTest\Mailer
autowire: true

Наконец, у меня есть это в index.php

use Symfony\Component\DependencyInjection\ContainerBuilder;
use Symfony\Component\Config\FileLocator;
use Symfony\Component\DependencyInjection\Loader\YamlFileLoader;

require_once __DIR__.'/vendor/autoload.php';

$container = new ContainerBuilder();
$loader = new YamlFileLoader($container, new FileLocator(__DIR__ . '\src'));
$loader->load('services.yml');

$mailer = $container->get('mailer');
$mailer->send('Hello world!');

Он пытается создать экземпляр класса Mailer без передачи аргумента конструктора. Может кто-нибудь сказать мне, где я иду не так.

Как мы должны отладить проблемы с автопроводкой?

1

Решение

Вам нужно позвонить $container->compile(); прежде чем пытаться получить службу почтовой рассылки для всех автоматически связанных ссылок, которые необходимо разрешить.

1

Другие решения

Других решений пока нет …