Аська Мыло RSS Twitter Facebook ВКонтакте Git ЖЖ N3b/home
Допустим, вы, как и я, решили использовать сервисы в качестве контролеров. Допустим, вам необходимо использовать один из сервисов в огромном количестве шаблонов. Ярким примером может послужить корзина покупок в e-commerce.

Варианта, по-моему, только 2:
1) Инжектить сервис в переменную шаблона и передавать ее дальше - от шаблона к шаблону. Утомительно, некрасиво, а при изменении структуры и вовсе губительно. Ясен пень, что явный инжект переменных от шаблона к шаблону улучшает контроль и читаемость кода. Но если шаблонов и переменных десятки? Брррр...
2) Достать сервис прямо в шаблоне! Не так явно, но весьма гибко и быстро. Как минимум, вам не придется перелопачивать тонны кода при изменениях в самом сервисе.

Так вот, касательно сервисов в шаблонах. Напрямую их достать не получится, увы. Тем не менее, их можно вытащить через слой templating helpers.

Итак, нам понадобятся 2 класса. Непосредственно сервис и template helper:



В описании сервисов нашего бандла инжектим сервис каталога в helper:


Ну а теперь очень легко и просто вытаскиваем сервис из helper'a


UPD. По сути, templating helpers - сами по себе являются сервисами. Доступ к ним во вьюхе регулируется наличием тега name: templating.helper в конфигурации сервисов. Таким образом, во вьюхе можно использовать абсолютно любой сервис, а прослойка хелперов необходима лишь для того, чтобы дать доступ только к конкретным публичным методам сервиса. Т.е. если вы используете сервис и как контролер, и как хелпер во вьюхе, то в шаблонах будут доступны экшны этого контролера, что не есть хорошо. Воскресенье, 24 Июля, 2011

Основная проблема борьбы со спамом заключается в том, что пользователи стали настолько тупыми, что их сложно отличить от спама. reply · retweet · favorite

Из ЖЖ: новый антипаттерн "Паблик Морозов". Класс-потомок выдает по запросу все данные класса-предка, независимо от степени их сокрытия. reply · retweet · favorite

Сегодня машина не только не роскошь, но еще и не средство передвижения reply · retweet · favorite

одержавшая победу партия власти нуждается в вооружённой защите от только что поддержавшего её народа. reply · retweet · favorite

Программисты - очень душевные люди. По вечерам они садятся в кресло, наливают себе чаю и смотрят, как горят сроки сдачи проектов... reply · retweet · favorite

В такую погоду хорошо сидеть в кресле у камина, неторопливо потягивая кота за яйца reply · retweet · favorite

Очередная инъекция в экономику на поверку оказалась все той же клизмой reply · retweet · favorite

Если ласточки летают хвостами вперед - на улице сильный ветер reply · retweet · favorite