Проблема при загрузке Сервис инъекцией - PullRequest
1 голос
/ 01 июня 2019

Я пытаюсь создать сервис, который можно внедрить в любом месте.Для этого я пытаюсь передать в качестве аргумента компонент HttpClient Symfony 4.3

Я показываю вам сервис

https://i.stack.imgur.com/2384M.png

    <?php

namespace App\Service\Callback;


use Symfony\Component\HttpClient\HttpClient;

class Back
{

    private $client;

    public function __construct(HttpClient $httpClient)
    {
        $this->client = $httpClient::create();
    }

    public function sendCallback ( $method, $urlCallback, $option)
    {
        $response = $this->client->request($method,$urlCallback,$option);

        $statusCode = $response->getStatusCode();
        return $statusCode;
    }

}

Ну, я пытаюсьзагрузить его в services.yml

# This file is the entry point to configure your own services.
# Files in the packages/ subdirectory configure your dependencies.

# Put parameters here that don't need to change on each machine where the app is deployed
# https://symfony.com/doc/current/best_practices/configuration.html#application-related-configuration
parameters:
    locale: 'en'
    base_url_front: '%env(BASE_URL_FRONT)%'
    mobile_type: 2

services:
    # default configuration for services in *this* file
    _defaults:
        autowire: true      # Automatically injects dependencies in your services.
        autoconfigure: true # Automatically registers your services as commands, event subscribers, etc.


    Nexy\Slack\Client: '@nexy_slack.client'

    Symfony\Component\HttpClient\HttpClient: '@http.client'

    # makes classes in src/ available to be used as services
    # this creates a service per class whose id is the fully-qualified class name
    App\:
        resource: '../src/*'
        exclude: '../src/{DependencyInjection,Entity,Migrations,Tests,Kernel.php}'

    # controllers are imported separately to make sure services can be injected
    # as action arguments even if you don't extend any base controller class
    App\Controller\:
        resource: '../src/Controller'
        tags: ['controller.service_arguments']

    App\Service\Models\:
        resource: '../src/Service/Models'
        tags: ['@doctrine.orm.entity_manager','@nexy_slack.client']

    slack_client:
        class: 'App\Service\SlackClient'
        autowire : true
        arguments: ['@nexy_slack.client','@kernel']
        public : true

    callback_client:
        class: 'App\Service\Callback\Back'
        autowire: true
        arguments: ['@http.client']
        public: true

    App\Service\Apiclient\AteneaService:
        arguments: ["%kernel.environment%"]

    App\Service\Apiclient\UpmService:
        arguments: ["%kernel.environment%"]

    App\Service\Apiclient\HermesService:
        arguments: ["%kernel.environment%"]

    App\Service\Socket\:
        resource: '../src/Service/Socket'
        tags: ['@kernel','@nexy_slack.client']

Проблема заключается в том, что если я запускаю php bin / console debug: autowiring в терминале, чтобы узнать, создал ли я его, возвращается следующая ошибка:

Вы запросили несуществующую службу "http.client".

В конце концов я хочу добиться чего-то вроде этого:

public function getClient(Back $back)
{

    $back->sendCallback('GET','http://vro-back.localhost:8888/callback/test');

}

Но я не могу, потому что я не могу внедрить его.

В конце, если вы посмотрите на services.yml, я пытаюсь создать псевдоним для компонента HttpClient, поэтому я могу передать его какаргумент конструктору класса Back

И маршрут, который я пытаюсь загрузить, существует ...

Symfony \ Component \ HttpClient \ HttpClient;

Это компонент, с которым я пытаюсь работать

https://symfony.com/doc/current/components/http_client.html

Я быпризнателен за любую помощь.

1 Ответ

1 голос
/ 02 июня 2019

Вам нужно ввести интерфейс подсказки вместо public function __construct(HttpClientInterface $httpClient) { $this->httpClient = $httpClient; }

И удалите конфигурацию service.yaml https://symfony.com/doc/current/components/http_client.html

...