Как написать свой функционал в пределах одного Bundle?
Задача:
Весь функционал приложения строится на табах между которыми пользователь переключается (Меню, Настройки, информация и т.д.). Очень хочу выдавить из себя красивое решение в рамках одного Bundle на фреймворке simfony, но опыта в этом фреимворке мало, так что не могу организовать код.
Предположительное решение:
Хочу создать класс Tab с нужными свойствами (ссылка, активность, надпись и т.д.) и класс TabStack, который будет содержать в себе массив объектов Tab и метод register. В SourceBundle.php регистрировать табы для того, чтобы при переходе на каждый контроллер эти табы появлялись на странице (выводиться будут в основном шаблоне Bundl-а). Но не совсем понимаю, в какой директории Bundl-а можно хранить код, реализующий функционал.
Можно развить мою идею? Или есть более лучшие и гибкие предложения?
P.S.
Приложение делаю для своих целей в рамках обучения.
А в чём проблема? Нормально придумано. Классы Tab и TabStack поместить в папку Tab, TabStack сделать сервисом, в контроллере использовать (или в шаблоне).
>и метод register. В SourceBundle.php регистрировать табы
А для чего регистрировать? чтобы в разных контроллерах появлялись разные табы? Я бы подумал о тегах у таба - у каждого таба определённые теги, которые указывают, где их использовать. И в контроллере получать по тегам.
Сколько табов у вас?
Надеюсь я не слишком затянул с ответом. По первоначальному плану хотелось бы зарегистрировать все табы (которые для всех контроллеров будут одинаковые) в SourceBundle.php, но не могу получить тот же TabStack из класса, описывающего Bundle, в этом вся проблема.
В самом идеальном случае - когда в контроллерах есть какой то метод, возвращающий массив объектов (табов), относящихся к этому контроллеру, и перед запуском основного приложения все эти табы как нибудь компоновались в один большой массив с табами и выводились пользователю, сразу все табы, из всех контроллеров приложения.
wolf-9830: Сделайте TabStack сервисом, потом в бандле SourceBundle регистрируете табы - либо в SourceBundle.php в методе boot(), либо с помощью событий.
Если табы регистрируются статически (то есть, список табов строится методом, а находится в каком-либо конфиге), то предлагаю список табов передавать через определение сервиса TabStack:
>когда в контроллерах есть какой то метод, возвращающий массив объектов (табов)
Теперь в контроллере получаете TabStack из контейнера, и в нём берите уже готовый список табов. Или получать список табов в шаблоне (сделать функцию через расширение Twig).