Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [Symfony][Symfony2] Jak budować aplikację? Templatki, panel administracyjny...
Forum PHP.pl > Forum > PHP > Frameworki
in5ane
Cześć. Startuję z frameworkiem Symfony2 i mam kilka pytań.

W jaki sposób tworzycie stronę? Czy każdy bundle to osobny moduł? Np. auth (logowanie, rejestracja), strony statyczne, galeria? Co w takim wypadku, gdy chciałbym stworzyć profile użytkowników? To też osobny bundle czy to jeszcze w auth?

Kolejna sprawa, co z templatkami? Czy stworzyć sobie bundle, który definiować będzie główny szablon z treścią niezmienną? A inne bundle (moduły/podstrony) miały by się do tego odwoływać?

W jaki sposób zbudować panel administracyjny? Czy to też kolejny bundle? Jakaś obsługa logowania? Osobna templatka? Czy może w każdym bundle definiowanie funkcji administracyjnych?


Z góry dzięki za udzielenie konkretnych odpowiedzi. Wiem, że odpowiedź na moje pytania może być "rób, jak Ci łatwiej". Ale wolałbym wiedzieć, jakie są standardy, który powiedzmy większość programistów wykorzystuje.
Fluke
1) Jeśli chodzi o templaty to zrób sobie ogólny template: app/Resources/views/base.html.twig. Następnie zrób sobie Twig_Extension np: LayoutResolver z metodą, która będzie zwracać ci odpowiedni widok (czy template admin, user, ajax, itp..).
2) Bundle to już robisz wedle uznania. Ja bym zrobił bundle AuthBundle (logowanie, wylogowanie, przypomnienie hasła itp...) oraz UserBundle (edycja profili, tworzenie itp...). Oczywiście panel administracyjny zawierał by się w tych bundlach ale (czasem) żeby to były inne kontrolery, np: UserBundle/Controller/Admin/IndexController albo UserBundle/Controller/User/IndexController. Oczywiście to już jest kwestia tego czego dokładnie chcesz zrobić bo każdy i tak zrobi to inaczej bo nie ma idealnego przepisu na to.

Pozdrawiam.
athabus
Też zaczynam zabawę - ogólnie wg. mnie w danym bundlu powinna się znaleźć kompletna aplikacja minus powtarzalne elementy. Przykładowo jak robisz forum, to wg. mnie powinieneś mieć 1 bundla + ewentualnie powtarzalne elementy wydzielić do innych - przez powtarzalne elementy rozumiem np. kwestie rejestracji/modyfikacji użytkowników, jakieś zarządzanie uploadem grafiki/plików itp. Czyli innymi słowy, jak widzisz, że piszesz coś co się przyda w innej aplikacji, to wydzielasz to do osobnego modułu.

U mnie jest tak, że jak pomyślę "o to by się przydało wydzielić do bundla", to się okazuje, że już ktoś tak pomyślał i taki bundel już jest do pobrania ;-) Moim zdaniem nie ma sensu sztucznie mnożyć bundli - jeśli coś jest indywidualnie pisane pod jeden projekt, to nie ma sensu z tego robić sztucznie modułu.
kpt_lucek
Trochę dawno temu ostatnio ktoś tu zaglądał. Pozwolę sobie odkopać.

To i ja dodam od siebie.

1) Podstawowa struktura
Ja przyjąłem że każdy bundle ma określone zadanie, każdy z bundli spełnia tylko tą rolę do której został stworzony i najlepiej nic poza tym. Staraj się nie rozbijać kodu po kilku bundlach, bo jak aplikacja Ci się rozrośnie to będziesz miał problemy z zarządzaniem.

Nie sugeruję tworzenia bundli precyzyjnie pod widoki, encje, transformery itp, wręcz przeciwnie - odradzam. Dlaczego?

Pomyśl sobie że masz prostą apkę, na przykład... Blog? Powiedzmy że masz gdzieś tam upchany kalendarz który jako widget używa Twojego transformera (nie ważne w jaki sposób i po co). Teraz pomyśl że ten widget znajduje się w :
- SuperClockBundle
a transformer w :
- DataTransformersBundle

Jaki jest sens trzymania go tam jeżeli owy kalendarz zniknie ze strony?
(dobra, przykład może się średnio udał, ale liczy się fakt).

poza tym, łatwiej zarządzać aplikacją jeżeli dany bundle pełni konkretną rolę. Nie każdy z moich bundli ma controllery i widoki!

2) Templatki
Cytat(Fluke @ 4.10.2014, 14:26:35 ) *
1) Jeśli chodzi o templaty to zrób sobie ogólny template: app/Resources/views/base.html.twig. Następnie zrób sobie Twig_Extension np: LayoutResolver z metodą, która będzie zwracać ci odpowiedni widok (czy template admin, user, ajax, itp..).
[...]

Ja przyjąłem zasadę że główny template przeważnie ląduje w app/Resources/views jak @Fluke proponował. Poza tym, wszystko leci po staremu, każdy bundle w zależności od potrzeb rozszerza albo ::base.html.twig albo inną konkretnie mu potrzebną.

3) Admin
Nie wiem jak inni, ale moim zdaniem warto jest robić sobie "paczki". Od tego masz namespace aby Ci się wygodniej z tym pracowało (przykład może nie najlepszy).
Struktura
Ja przyjmuję strukturę "paczkowania" jeżeli aplikacja ma taki wymóg.
/src
----/Admin
--------/ABCBundle
--------/ABDBundle
--------/XYZBundle
----/Website
--------/QWEBundle
--------/Package
------------/P1Bundle
------------/P2Bundle
--------/CosBundle
----/RestApiBundle

Templatka - w zależności od tego co panel ma za zadanie robić, możesz obudować templatki (twig?) o jakąś logikę dostarczaną przez controller i w nich decydować, bądź potraktować panel admina jako osobny "projekt" i jak w przykładzie wyżej ogarnąć go jak "Website"

Logowanie - Jeżeli admin jest innym userem, czytaj - musi się zalogować loginem nie dostępnym z poziomu formularza dla normalnego użytkownika, to zapewne wypadało by "podpiąć" 2gą metodę autoryzacji, jeżeli ma dostęp tym samym kontem zarówno w Website jak i w Admin, to Role wystarczą.

Funkcje administracyjne w każdym bundle - zależy od przyjętej strategii. Zazwyczaj operujesz na bazie danych, nie na czystym tekście itp. Tak więc uważam że Panel powinnien być traktowany jako osobna aplikacja - obudowana o swoje bundle które "sprawiają" że działa (patrz przykład struktury wyżej).


W razie pytań wal.

Pozdrawiam
nrm
Poczytaj: http://symfony.com/doc/download-best-practices-book/

Nie ma potrzeby zawsze i wszędzie robić bundli na potegę jak ku temu nie ma powodu.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.