Параметр Autowire String в symfony

Как я могу подключить параметр String в Symfony 3.4?

У меня простой сервис, и я хочу подключить параметр url, указанный в parameters.yml:

namespace AppBundle\Service;

use Psr\Log\LoggerInterface;

class PythonService {

    private $logger;
    private $url;

    /**
     * @param LoggerInterface $logger
     * @param String $url
     */
    public function __construct(LoggerInterface $logger, String $url) {
        $this->logger = $logger;
        $this->url = $url;
    }
}

Мой service.yml выглядит так:

AppBunde\Services\PythonService:
    arguments: ['@logger', '%url%']

Но я получаю сообщение об ошибке:

Cannot autowire service "AppBundle\Service\PythonService": argument "$url" of method "__construct()" is type-hinted "string", you should configure its value explicitly.

Я пробовал также вручную указать параметры:

AnalyticsDashboardBunde\Services\PythonService:
    arguments:
        $logger: '@logger'
        $url: '%session_memcached_host%'

Это дает мне следующую ошибку:

Invalid service "AppBundle\Services\PythonService": class "AppBundle\Services\PythonService" does not exist.
AnalyticsDashboardBunde, AppBundle, что правильно?
u_mulder 03.08.2018 14:58

Как упоминалось в теперь удаленном ответе, просто измените Services на Service в исходном определении службы, и все должно быть в порядке. И правильно пишите AppBundle.

Cerad 03.08.2018 15:07
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
7
2
7 076
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

    //    services.yml
    app.python_service:
    class: AppBundle\Service\PythonService
    arguments:
        $logger: '@monolog.logger.request'
        $url: 'link'
    public: true

     //   in controller
    //use container:
    $pS = $this->container->get('app.python_service');

Использование контейнера не рекомендуется, вместо этого введите зависимости.

u_mulder 03.08.2018 14:59

просто помог public: true. Спасибо

Joozty 03.08.2018 15:03

Нет. Это работает, но это неправильный способ. Это работает только потому, что Services были изменены на Service. И не вынимайте вещи из контейнера. Печально, что правильный ответ был удален неправильно.

Cerad 03.08.2018 15:06
Ответ принят как подходящий

Во-первых, у вас опечатка в AppBundle\Services\PythonService (Services <> Service).

Затем строка <> String. В php нет прописных букв.


Вы можете привязать аргумент к определенному параметру / услуге:

service.yml:

services:
    _defaults:
        bind:
            $memcacheHostUri: '%session_memcached_host%'

Класс обслуживания: (имя переменной должно совпадать с указанным ^)

public function __construct(LoggerInterface $logger, string $memcacheHostUri)

Действие контроллера:

public function myAwesomeAction(PythonService $pythonService)
{
    $pythonService->doPythonStuffs();
}

С помощью этого решения, если вы создаете другие службы, которым нужен memecacheHostUri, он также будет автоматически подключен к этим службам.

Ресурсы:

Связывание аргументов

Другие вопросы по теме