2012-05-29 4 views
5

Я новичок в разработке веб-сайтов с Symphony2 (хотя определенно не новичок в разработке веб-сайтов), и я собираюсь начать проект среднего размера, который будет нарезан пучками , так как каждая установка приложения может иметь другую настройку доступных функций.Symfony 2 - Генерировать записи меню из доступных пакетов

Я хотел бы генерировать мою навигацию динамически из доступных пакетов, например. если пакет «foo» активен, должна появиться запись в меню с указанием пути к действию главного контроллера foo.

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

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

Могут ли услуги быть здесь? Или события? Или что-то с инъекцией зависимостей, поэтому в связках появляется экземпляр элемента NavigationConfigurationElement во время построения?

Любые вводные данные или мысли об этом, а может быть, некоторые ссылки на примеры, как это сделать, будут очень признательны.

С наилучшими пожеланиями, Jens

ответ

6

я вещь лучшим способом сделать это, чтобы использовать инъекции зависимостей тегов. вам нужно будет создать расширение для инъекций зависимостей и предложить «тег», который может использоваться различными пучками для регистрации их записей в меню.

Я не буду описывать вас весь процесс здесь, потому что в Интернете есть много ресурсов.

, но, чтобы дать вам краткий набросок того, что делать

  1. внедрить услугу проведения записи меню (одноточечные вы где речь)
  2. процесса по тегу по реализации компилятора пасс, этот компилятор pass будет искать все службы, помеченные классом навигации, и зарегистрировать их с помощью сервиса меню
  3. создать функцию твига, которая будет использовать эту услугу для извлечения меню и визуализации
  4. писать пакеты, которые используют тег и предоставляют пункты меню

вот некоторые ресурсы, которые могут помочь вам:

http://symfony.com/doc/current/components/dependency_injection/tags.html http://miguel.ibero.me/es/post/2012-04-28/adding-tags-to-symfony.html

я в настоящее время реализует SOLR пакет для Symfony, который использует DI теги, а также. У меня есть класс под названием IndexManager, который управляет различными индексами solr из разных пакетов. я использую тег DI, чтобы другие узлы могли регистрировать контент/объекты, которые они хотят индексировать в solr. принцип тот же, что и в пунктах меню.

посмотреть здесь: https://github.com/roomthirteen/Room13SolrBundle

важные файлы:

добавив проход компилятора: https://github.com/roomthirteen/Room13SolrBundle/blob/master/Room13SolrBundle.php компилятор выдавать себя: https://github.com/roomthirteen/Room13SolrBundle/blob/master/DependencyInjection/Compiler/SolrCompilerPass.php

надежду, что помогает. больше заданий? не стесняйтесь спрашивать.

+0

Это звучит очень интересно и, вероятно, похоже на самый симфоничный способ сделать это. Я проверю его и попробую, и вернусь к вам, если он сработает, как я думал. Что вы очень хотите для ввода! – jhoffrichter

+0

нет проблем. если вы это подтвердите, отметьте это;) – room13

+0

Как только я его оценил, я буду :) – jhoffrichter

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