Symfony вводит массив через services.yaml

Я пытаюсь внедрить массив в Event Subscriber, но также добавляю другой репозиторий, поэтому не знаю, как это будет работать:

Вот что я пытаюсь:

services.yaml

Path\To\My\EventSubscriber\TerminateSubscriber:
    arguments:
        - { param1: 'myvalue', param2: 'myvalue2' }

TerminateSubscriber.php:

private Repository $repo;
/** @var array<string, string>  */
private array $config;

public function __construct(Repository $repo, array $config = [])
{
    $this->repo = $repo;
    $this->config = $config;
}

В нем говорится, что первый параметр должен быть экземпляром репо, заданным массивом. Но если я переключаю параметры, он говорит «необязательный параметр, указанный перед обязательным».

РЕДАКТИРОВАТЬ

Массив должен выглядеть так:

[
  "a" => [400],
  "b" => [400, 500],
]
Стоит ли изучать 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 и хотите разрабатывать...
0
0
1 071
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

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

В сервисе.yaml:

Path\To\My\EventSubscriber\TerminateSubscriber:
  arguments: [ App\Repository\MyRepository, [MyArray],"My String Value" ]

И в вашей конструкции:

/**
 * @param Repository $repo
 * @param array $config 
 * @param string $stringValue
 */
public function __construct(Repository $repo, array $config = [], string $stringValue)
{
    $this->repo = $repo;
    $this->config = $config;
    $this->string = $string;
}

Как мне определить массив, чтобы он выглядел примерно как мой пост редактирования, проверьте редактирование, пожалуйста

Thomas Britsom 10.12.2020 13:29

Я не думаю, что у вас возникнут проблемы с этим @Thomas Britsom. Вы можете скопировать свой код в сервисе, где у меня есть [MyArray] . Попробуйте, и если есть какие-либо ошибки, пожалуйста, отправьте его обратно.

Kolovos Konstantinos 10.12.2020 13:33

Я не знаю, как построить этот массив в yaml

Thomas Britsom 10.12.2020 13:35

@ThomasBritsom Расширенные и встроенные массивы

gp_sflover 10.12.2020 13:38

выравнивая поля с помощью табуляторов, вы можете создать массив без "[" и "]" и, естественно, используя новые строки, как и ожидалось. и это не выглядит так уж уродливо (я имею в виду встроенный - встроенный просто уродлив)

clockw0rk 16.11.2022 17:04

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