Допустим, вы, как и я, решили использовать сервисы в качестве контролеров. Допустим, вам необходимо использовать один из сервисов в огромном количестве шаблонов. Ярким примером может послужить корзина покупок в 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