Как получить доступ к параметрам конфигурации из слоя модели в Symfony 2? - PullRequest
3 голосов
/ 27 августа 2011

Есть ли способ доступа к параметрам конфигурации в config.yml со слоя модели?С контроллера могу использовать $this->container->getParameter('xyz').Но как это можно сделать из класса в слое Model?

Ответы [ 3 ]

6 голосов
/ 27 августа 2011

В symfony2 объекты спроектированы как POPO, что означает, что у них не должно быть доступа к чему-либо вне их области действия.

Если вам нужен какой-либо параметр конфигурации в одном из ваших объектов, рассмотрите его какпараметр с контроллера вот так:

$entityName->methodName($param1, $this->container->getParameter('xyz'));
0 голосов
/ 13 июня 2016

Это может (будет) нарушать шаблон DIC, но вы можете использовать одноэлементный класс для "глобализации" того, что вам нужно.

Чтобы прокормить глобальные переменные, используйте метод boot из класса Bundle (где вы можетеполучить доступ к материалам DIC и, следовательно, к конфигурации).

Или, проще, добавьте статическое поле в вашу сущность.

Быстрое и грязное решение, не злоупотребляйте им; -)

0 голосов
/ 29 августа 2011

Вы можете использовать Dependency Injection и добавить свою модель в файл services.yml, и, как и любой другой сервис, который вы делаете, вы можете предоставлять другие сервисы в качестве параметров конструктора. Единственный недостаток - вы звоните $derp = $this->get("your_service_name"); вместо $derp = new Derp();.

Например:

    # src/Derp/LolBundle/Resources/config/services.yml
    services:
        derp:
            class:        \Derp\LolBundle\Entity\Message
            arguments:    [@service_container]

@service_container - услуга, найденная с использованием php app/console container:debug. Он будет функционировать идентично $this->container в ваших контроллерах и предоставляется конструктору вашего класса. См. здесь для получения дополнительной информации о том, как использовать сервисные контейнеры.

Как уже упоминалось ранее, это POPO (простые старые объекты PHP), и предыдущий метод внедрения зависимостей является плохим выбором, просто потому, что вам придется помнить, что объект вашей модели должен предоставлять один и тот же объект каждый раз, когда вы его используете сервисы Symfony2 - это способ смягчить эту боль.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...