wtorek, 7 kwietnia 2009

CakePHP - Routing.admin

Jedną z najbardziej denerwujących rzeczy jaka pojawia się podczas tworzenia projektu jest stworzenie sekcji administratora. Standardowo wszyscy robią to korzystając ze zmiennej, którą można odkomentować w pliku config/core.php.
Configure::write('Routing.admin', 'admin');

Wszystko pięknie bo odkomentowanie tej zmiennej daje nam możliwość dostępu do kontrolerów z prefixem ( w tym przypadku ) admin, czyli np. localhost/admin/users/add. Dodatkowo możemy oprzeć na tym całą autoryzację itp itd. Mimo to rozwiązanie takie jest totalnie w moim przekonaniu beznadziejne z uwagi na jeden fakt. Korzystając z tego rozwiązania w kontrolerach musimy tworzyć dodatkowe akcje z prefixem ( w tym przypadku ) admin_. Nie wiem kto to wymyślił i czym się kierował ale jest to idiotyczne. Dlaczego chcąc mieć dostęp do standardowych metod CRUD muszę tworzyć metody admin_add, admin_edit i tak dalej? Dlaczego nie można było zrobić to na zasadzie folderu admin w katalogu controllers? Nie wiem i prawdę mówiąc, nigdy nie miałem jakoś ochoty się nad tym dłużej zastanawiać.

Nie zmienia to faktu, że jakoś trzeba robić te panele administracyjne. Oczywiście można strzelić dwie aplikacje stojące obok siebie oparte o jedne core. Nie jest to jednak imho jakieś super rozwiązanie bo ja chcę mieć jedną aplikację.

Z pomocą przychodzą nam pluginy dostępne w CakePHP. Ich oryginalne przeznaczenie jest może trochę inne ale idealnie sprawdzają się do tego typu zadań. Posiadamy w nich własne modele, kontrolery, helpery, komponenty itp., które naturalnie możemy wykorzystywać w całej aplikacji. Pozwalają na separację ( co jest logiczne, w przeciwieństwie do tego co oferuje rozwiązanie z Routing.admin ) logiki, widoków, modeli bla bla bla, panelu administracyjnego od samej aplikacji widzianej przez użytkownika. Przykładowo ostatnio miałem aplikację gdzie klient widzi pewne strony gdzie wykorzystywany jest tylko jeden kontroler i jeden model. Po co miałbym pakować tam jeszcze około 9 dodatkowych kontrolerów i modeli które potrzebne były mi w panelu?

Więcej o pluginach warto poczytać w oficjalnej dokumentacji CakePHP. Wszystko zostało całkiem nieźle opisane, choć nie ukrywam, że oparcie przykładów o plugin Pizzy nie był zbyt trafiony.