Использование одного элемента массива в качестве аргумента конструктора сервиса в symfony2

#php #arrays #symfony #dependency-injection #parameter-passing

#php #массивы #symfony #внедрение зависимости #передача параметров

Вопрос:

В документах symfony2 на http://symfony.com/doc/current/components/dependency_injection/parameters.html в нем говорится, что параметры (в определениях сервисов) могут быть определены как массивы, например:

 parameters:
    foo.class:"Foo"
    foo.args:
        - arg1
        - arg2
  

Я хочу знать, как передать один элемент массива foo.args конструктору сервиса, т.е:

 services:
    foo:
        class:"%foo.class%"
        arguments:["%foo.args.1%"] //this line is in question.does this resolve to
                                   //"arg1"?if not, what does?
  

Ответ №1:

Ваша текущая реализация не будет работать.

Внутри symfony попытался бы получить доступ к array['1'] (ключ = строка) вместо array[1] (ключ = int).

Рассмотрите возможность использования фабрики сервисов, которая, в свою очередь, создает сервис с нужным элементом массива в качестве аргумента…

… или просто отфильтруйте элементы массива в конструкторе класса.

Комментарии:

1. Спасибо. и еще одно: итак, если бы ключи были строками, а массив был вложенным (имел более одного измерения), это сработало бы? просто спрашиваю это, потому что мне интересно, как он обрабатывает «точки» в имени параметра, чтобы определить, является ли это частью имени параметра или ключа.