2012-02-08 2 views
1

Я пытаюсь создать класс для управления некоторой части моего приложения , но мне нужно, чтобы получить доступ к конфигурации в ресурсах/config.ymlзависимости Symfony2 в классе

I судимых к расширяет свой класс с containerAware как контроллера Но он контейнер не установлен ...

Я хотел бы быть в состоянии сделать что-то подобное:

class MyClass extends ContainerAware 
{ 
    public function myFunciton() 
    { 
     $em = $this->get('Doctrine')->getEntityManager(); 
    } 
} 

любое предложение приветствуется

+0

Мое предложение - внимательно изучить раздел «Услуги» в справочном руководстве. [Услуги] (http://symfony.com/doc/current/book/service_container.html) После того, как вы прошли через процесс, становится тривиальным, чтобы добавить менеджера объектов в MyClass. – Cerad

ответ

4

Расширение ContainerAware автоматически не предоставляет доступ к контейнеру службы - вам нужно будет ввести контейнер в свой класс. Есть два способа сделать это:

  • Если ваш класс зарегистрирован в качестве службы, вы можете придать @service_container
  • Если ваш класс не является услугой, но осуществляется доступ из класса, который делает доступ к контейнер (например, контроллер), вы можете явно вызвать setContainer()

, как говорится, вы не должны вводить контейнер в классах. Это затрудняет тестирование ваших классов. Есть несколько исключений из этого, но они часто не возникают.

Вместо этого вы должны использовать только нужные вам услуги. В случае менеджера сущности вы должны ввести @doctrine.orm.default_entity_manager.

Что касается доступа к данным из config.yml, я бы предложил включить файл (который можно сделать при определении службы) и разбор yml с использованием Symfony\Component\Yaml\Parser или Symfony\Component\Yaml\Yaml. Парсер преобразует строку yml в переменную PHP, с которой вы можете легко работать.

+0

Спасибо за быстрый ответ! – user1014102

+0

Работает ли это для объекта? Как уметь самостоятельно сохранять объект? ex: $ entity-> save() – user1014102

+0

№ Объекты - это простые объекты PHP. Они не знают менеджера сущности и не должны. Вы думаете о шаблоне Active Record из Doctrine 1. Doctrine 2 использует шаблон Data Mapper. –

Смежные вопросы