Это метод, который Symfony использует для замены аргументов родителя в дочернем сервисе:
/**
* You should always use this method when overwriting existing arguments
* of the parent definition.
*
* If you directly call setArguments() keep in mind that you must follow
* certain conventions when you want to overwrite the arguments of the
* parent definition, otherwise your arguments will only be appended.
*
* @param int|string $index
* @param mixed $value
*
* @return self the current instance
*
* @throws InvalidArgumentException when $index isn't an integer
*/
public function replaceArgument($index, $value)
{
if (\is_int($index)) {
$this->arguments['index_'.$index] = $value;
} elseif (0 === strpos($index, '$')) {
$this->arguments[$index] = $value;
} else {
throw new InvalidArgumentException('The argument must be an existing index or the name of a constructor\'s parameter.');
}
return $this;
}
Как видите, индексы должны быть выше, чем имена переменных аргумента в конструкторе родителя сс префиксом $
или целым числом, указывающим связанный аргумент.
Поэтому я думаю, что вы должны определить свою дочернюю службу следующим образом:
App\Services\Printer\Printer:
autowire: true
autoconfigure: false
public: false
parent: App\Services\PrinterManager
arguments:
2: '@logger'
3: '@oneup_flysystem.printer_invoice_filesystem'
4: '@oneup_flysystem.printerface_content_filesystem'
5: '@oneup_flysystem.sftp_filesystem'
6: '@App\Services\PrinterApiService'
tags:
- { name: monolog.logger, channel: printerlog}
Обновление:
После того, как я воспроизвелВаша проблема, я понял, что решение, как показано ниже.При таком решении автоматическая проводка Symfony будет работать для дочерней службы.
App\Services\Printer\Printer:
autowire: true
autoconfigure: false
public: false
parent: App\Services\PrinterManager
arguments:
$arg2: '@logger'
$arg3: '@oneup_flysystem.printer_invoice_filesystem'
$arg4: '@oneup_flysystem.printerface_content_filesystem'
$arg5: '@oneup_flysystem.sftp_filesystem'
$arg6: '@App\Services\PrinterApiService'
tags:
- { name: monolog.logger, channel: printerlog}
$arg2
, $arg3
, $arg4
, $arg5
и $arg6
должны быть заменены аргументом конструктора вашего классаимена.