Внедрение зависимостей не работает, но определяется вручную - PullRequest
0 голосов
/ 05 октября 2018

Я новичок в Symfony и пытаюсь использовать службу ClientManipulatorInterface из gos / web-socket-bundle.Моя проблема в том, что Symfony возвращает ошибку, даже если я настраиваю аргумент вручную.

Я всегда получаю эту ошибку: Невозможно автоматически подключить службу "Foo \ Bar \ Controller \ testTopic": аргумент "$ clientManipulator" метода "__construct() "ссылается на интерфейс" Gos \ Bundle \ WebSocketBundle \ Client \ ClientManipulatorInterface ", но такой службы не существует.Возможно, вам следует
псевдоним этого интерфейса к существующей службе "gos_web_socket.websocket.client_manipulator".

Вот мой service.yaml:

services:
    test_topic:
        class: Foo\Bar\Controller\testTopic
        tags:
            - { name: gos_web_socket.topic }
        arguments:
            - '@gos_web_socket.websocket.client_manipulator'

Это мой класс PHP:

namespace Foo\Bar\Controller;

use Gos\Bundle\WebSocketBundle\Client\ClientManipulatorInterface;
use Gos\Bundle\WebSocketBundle\Topic\TopicInterface;

class testTopic implements TopicInterface {

    /**
     * @var ClientManipulatorInterface
     */
    protected $clientManipulator;

    /**
     * testTopic constructor.
     * @param ClientManipulatorInterface $clientManipulator
     */
    public function __construct(ClientManipulatorInterface $clientManipulator) {
        $this->clientManipulator = $clientManipulator;
    }

    ...

1 Ответ

0 голосов
/ 05 октября 2018

Вам необходимо присвоить псевдоним ClientManipulatorInterface одной из его реализаций, чтобы Symfony мог правильно автоматически связать зависимость:

services:
    Gos\Bundle\WebSocketBundle\Client\ClientManipulatorInterface: '@gos_web_socket.websocket.client_manipulator'

    Foo\Bar\Controller\testTopic:
        autowire: true
        tags:
            - { name: gos_web_socket.topic }

После этого очистите кэш!

...