Сервис Symfony2 не является синглтоном - PullRequest
3 голосов
/ 01 апреля 2012

Я создаю простое встраиваемое веб-приложение поверх Symfony2, но я не могу создать глобальный / singleton / "контейнерный" сервис.Вероятно, я делаю ошибку новичка.

В контейнере службы symfony2 doc говорится, что службы "создаются только один раз, и один и тот же экземпляр возвращается каждый раз, когда вы запрашиваете службу", но мойсервисный конструктор вызывается при каждом запросе.

Я могу довольно легко это проверить из журналов.Я просто обновляю /p/new и вижу еще одно

[2012-03-31 21:32:56] app.INFO: InMemoryPasteService::__construct() [] []

Я также подтвердил, зарегистрировав результат

spl_object_hash($this->get('twobulb_paste_service'))

В контроллере (и хэш различен для каждого запроса).

Среда (app / prod), кажется, не имеет значения.

Как работать с областями действия говорит, что область по умолчанию - "контейнер", поэтому яэто означает, что должен быть только один экземпляр моего класса обслуживания.

Я начал со стандартного дистрибутива Symfony (без поставщиков) версии 2.0.12.

Исходный код:

Возможнопохожие посты:

Есть идеи?

Ответы [ 2 ]

11 голосов
/ 01 апреля 2012

Таким образом, между запросами не сохраняется состояние.Вы можете считать, что интерпретатор PHP перезагружается между каждым запросом.Так работает PHP.

2 голосов
/ 01 апреля 2012

Согласно этот пост spl_object_hash создает md5-хэш внутреннего указателя объекта.Так что это нормально, что он дает различный хэш между запросами.Хеш не изменяется в одном и том же цикле запроса.

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