Внедрение Сервисов в Сервис - PullRequest
0 голосов
/ 03 января 2019

Я пытаюсь внедрить общедоступные службы, такие как entityManager, в конструктор службы, которую я создал, но у меня по-прежнему возникает эта ошибка:

Слишком мало аргументов для функции App \ Services \ BillingInterface :: __ construct (), 0 передано в /var/www/.../src/Controller/TestController.php в строке 144 и ожидается ровно 1.

В моих контроллерах сервисы корректно вводятся разными методами, нов сервисе, который я создал, он не внедряется в конструктор.

Я ничего не менял в services.yaml, поскольку в документации сказано, что autowire в Symfony 4.2

PS: я недавно обновилсяот Symfony 4.1 до 4.2, и я не уверен, но думаю, что это работало раньше.

Возможно, библиотека не обновилась правильно, но я не нахожу никаких ошибок.

Вот информация для службы

Сервисный код:

#/src/Services/BillingInterface

namespace App\Services;

use Doctrine\ORM\EntityManagerInterface;

class BillingInterface {

    private $em;

    public function __construct(EntityManagerInterface $entityManager)
    {
        $this->em = $entityManager;
    }

}

Код контроллера:

namespace App\Controller;

use App\Services\BillingInterface;
use Doctrine\ORM\EntityManagerInterface;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;

class TestController extends AbstractController {

    public function teest(EntityManagerInterface $entityManager)
    {
        $billing = new BillingInterface();
    }


}

И если я создаю экземпляр BillingInterface с параметром $entityManagerr Контроллера, он работает, но я бы хотел, чтобы он вводился непосредственно в конструктор класса BillingInterface.

И, наконец, вот что написано в документации Symfony:

// src/Service/MessageGenerator.php
// ...

use Psr\Log\LoggerInterface;

class MessageGenerator
{
    private $logger;

    public function __construct(LoggerInterface $logger)
    {
        $this->logger = $logger;
    }

    public function getHappyMessage()
    {
        $this->logger->info('About to find a happy message!');
        // ...
    }
}

Ссылка : https://symfony.com/doc/current/service_container.html

Глава : Внедрение услуг / настройка службы

Итак, я не знаю, что не так с моей службой.

Спасибо за ваши ответы.

1 Ответ

0 голосов
/ 03 января 2019

Поскольку ваш BillingInterface является службой - вам нужно использовать его экземпляр, предоставленный контейнером Symfony, вместо того, чтобы пытаться создать его экземпляр самостоятельно.Ваш контроллер должен внедрить эту услугу, чтобы иметь возможность использовать ее:

namespace App\Controller;

use App\Services\BillingInterface;
use Doctrine\ORM\EntityManagerInterface;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;

class TestController extends AbstractController
{
    /**
     * @var BillingInterface
     */
    private $billing;

    /**
     * @param BillingInterface $billing
     */
    public function __construct(BillingInterface $billing)
    {
        $this->billing = $billing;
    }

    public function teest(EntityManagerInterface $entityManager)
    {
        // Use $this->billing ... 
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...