2012-05-29 15 views
5

Jestem nowy w tworzeniu stron internetowych z Symphony2 (choć z pewnością nie jest to nowość w tworzeniu stron internetowych), a mam zamiar rozpocząć projekt średniej wielkości, który zostanie podzielony na pakiety , ponieważ każda instalacja aplikacji może mieć inną konfigurację dostępnej funkcjonalności.Symfony 2 - Generuj wpisy w menu z dostępnych pakietów

Chciałbym dynamicznie generować moją nawigację z dostępnych pakietów, np. jeżeli pakiet "foo" jest aktywny, powinien pojawić się wpis menu z trasą do akcji głównego kontrolera foo.

Zwykle, moim podejściem byłoby stworzenie singleton gdzieś, który następnie wypełniłbym podczas load() funkcji pakietu, a podczas renderowania wyprowadzałbym singleton.

Ale symfony2 oferuje dużą elastyczność w tej części, więc obecnie oceniam, czy może być lepszy sposób.

Czy usługi mogą być sposobem na przejście tutaj? Czy wydarzenia? Lub coś z wtryskiem zależności, więc pakiety otrzymują instancję NavigationConfigurationElement w czasie budowy?

Wszelkie uwagi i przemyślenia na ten temat, a może niektóre linki do przykładów, jak to zrobić, byłyby bardzo mile widziane.

poważaniem, Jens

Odpowiedz

6

I rzeczą jest najlepszym sposobem, aby to zrobić, jest użycie wstrzykiwanie zależności tagi. będziesz musiał utworzyć rozszerzenie wtrysku zależności i zaoferować "znacznik", który może być używany przez różne pakiety do rejestrowania ich wpisów w menu.

Nie opiszę tutaj całego procesu, ponieważ w Internecie jest mnóstwo informacji na ten temat.

ale daje krótki zarys tego, co robić

  1. wdrożyć usługę utrzymywania pozycji menu (singleton ty gdzie mówisz)
  2. proces tag wdrażając przepustkę kompilatora, to kompilator pass wyszuka wszystkie usługi oznaczone klasą nawigacji i zarejestruje je za pomocą usługi menu:
  3. utworzy funkcję gałązki, która będzie korzystać z usługi do pobierania menu i renderowania go
  4. zapisywać paczki, które używają tego znacznika i udostępniać pozycje menu

tutaj są pewne środki, które mogą pomóc:

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

Jestem obecnie wdraża pakiet SOLR dla symfony, który używa DI tagi, jak również. Mam klasy o nazwie IndexManager, który zarządza różnych indeksów solr z różnych pakietów. Używam znacznika DI, aby inne pakiety mogły rejestrować zawartość/encje, które mają być indeksowane w Solr. zasada jest taka sama jak w przypadku pozycji menu.

zobaczyć tutaj: https://github.com/roomthirteen/Room13SolrBundle

ważne pliki są:

dodanie przepustkę kompilatora: https://github.com/roomthirteen/Room13SolrBundle/blob/master/Room13SolrBundle.php kompilator zdać sobie: https://github.com/roomthirteen/Room13SolrBundle/blob/master/DependencyInjection/Compiler/SolrCompilerPass.php

nadzieję, że pomoże. więcej questins? nie wahaj się zapytać.

+0

To brzmi bardzo interesująco i prawdopodobnie najbardziej symfoniczny sposób na zrobienie tego. Sprawdzę to i spróbuję, i wrócę do ciebie, jeśli zadziała, jak myślałem. To bardzo dużo dla twojego wkładu! – jhoffrichter

+0

bez prob. jeśli uważasz, że ta odpowiedź jest właściwa, zgłoś ją;) – room13

+0

Jak tylko ją ocenię, to będę :) – jhoffrichter