Задать вопрос
@sl1m_dogg

Что не так с моими экстеншенами в symfony3?

Объявил два сервиса с зависимостями, прописую ./bin/console debug:container и вижу оба сервиса в контейнере, но когда запускаю контроллер, то пишет null given. Код:
ideone.com/VQ65jr
  • Вопрос задан
  • 284 просмотра
Подписаться 1 Оценить Комментировать
Пригласить эксперта
Ответы на вопрос 2
@sl1m_dogg Автор вопроса
<?php

namespace MailerBundle\DependencyInjection;

use Symfony\Component\DependencyInjection\Definition;
use Symfony\Component\DependencyInjection\Reference;
use Symfony\Component\HttpKernel\DependencyInjection\Extension;
use Symfony\Component\DependencyInjection\ContainerBuilder;

class MailerExtension extends Extension
{

    /**
     * Loads a specific configuration.
     *
     * @param array $configs An array of configuration values
     * @param ContainerBuilder $container A ContainerBuilder instance
     *
     * @throws \InvalidArgumentException When provided tag is not defined in this extension
     */
    public function load(array $configs, ContainerBuilder $container)
    {
        $container->setDefinition('emailsender', new Definition('MailerBundle\Sender\EmailSender'),[
            new Reference('swiftmailer.mailer'),
            new Reference('swiftmailer.transport')]);

        $container->setDefinition('emailnotifier', new Definition('MailerBundle\Controller\EmailController'),[
                  new Reference('emailsender')]);
    }
}
Ответ написан
Комментировать
BoShurik
@BoShurik Куратор тега Symfony
Symfony developer
Параметры классов передаются в конструкторе Definition, а не в методе setDefinition
public function load(array $configs, ContainerBuilder $container)
    {
        $container->setDefinition('emailsender', new Definition('MailerBundle\Sender\EmailSender', [
            new Reference('swiftmailer.mailer'),
            new Reference('swiftmailer.transport')]));

        $container->setDefinition('emailnotifier', new Definition('MailerBundle\Controller\EmailController', [
                  new Reference('emailsender')]));
    }

Используй PhpStorm, он от таких ошибок защищает
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы