Symfony сервисный контейнер - использовать фабрику с аргументами в качестве аргумента - PullRequest
1 голос
/ 06 мая 2020

У меня есть модель, которая вернет объект-значение группы в зависимости от переданного ему UID. Эта модель также содержит константы для групповых UID.

<?php
namespace V2\Models\Config;

class Groups
{
    const UID_A = 'A';
    const UID_B = 'B';
    const UID_C = 'C';
    const UID_D = 'D';
    const UID_E = 'E';

    /** @var \X\Group\Group */
    private $group;

    public function __construct(\X\Group\Group $group)
    {
        $this->group = $group;
    }

    public function getGroup(string $uid): \X\Core\ValueObject\Group
    {
        return $this->group->getByUid($uid);
    }
}

I wi sh, чтобы ввести групповые ВО в службы в качестве аргумента, служба, в которую я sh вставляю группу, выглядит так:

  v2.spencer.doc_control.revision.validator:
    class: X\DocControl\Revision\Validator
    autowire: true
    arguments:
      $referenceValidator: '@v2.x.doc_control.revision.reference.validator'
      $privateDocsGroup: '?'

Я хочу для внедрения группового VO, возвращенного из фабрики. Группы :: getGroup (uid) передали, например, указанный c UID из приведенных выше определений аргументов (это не работает, но, надеюсь, передает мои намерения)

$privateDocsGroup: '@v2.groups:getGroup(!php/const:V2\Models\Groups::UID_C)'
// or perhaps

arguments:
  $privateDocsGroup:
    factory: 'v2.groups:getGroup'
    arguments:
      $uid: !php/const:V2\Models\Groups::UID_C

Возможно ли это, или мне нужно определить службы для каждой отдельной групповой ВО, возвращаемой из Factory (я ценю, что мог бы просто настроить службу для каждой групповой ВО и ввести ее, но это кажется большим конфигурации)?

...