Я пытаюсь внедрить массив в 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],
]






Вы очень близки, но вам нужны некоторые изменения в вашем коде. Если вам нужно передать репозиторий, массив или строку из службы в класс, вам нужно передать это так.
В сервисе.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. Вы можете скопировать свой код в сервисе, где у меня есть [MyArray] . Попробуйте, и если есть какие-либо ошибки, пожалуйста, отправьте его обратно.
Я не знаю, как построить этот массив в yaml
@ThomasBritsom Расширенные и встроенные массивы
выравнивая поля с помощью табуляторов, вы можете создать массив без "[" и "]" и, естественно, используя новые строки, как и ожидалось. и это не выглядит так уж уродливо (я имею в виду встроенный - встроенный просто уродлив)
Как мне определить массив, чтобы он выглядел примерно как мой пост редактирования, проверьте редактирование, пожалуйста