Daniel Częstki

Daniel Częstki senior php developer

Temat: moduł / controler / akcja - 3 poziomowy dostep do funkcji

Hej.

Pracując sobie na frameworku Laravel do tej pory tworzyłem aplikacje w oparciu o model kontroler-akcja.
Rozbudowalem ostatnio aplikacje o moduły, w ramach których grupowane są kontrolery i ich akcje.
Mam sobie taki przypadek. Mam poziome menu składające się z modułów systemu.
Dajmy na to:

Zarządzanie | Analiza | Konfiguracja

Jak kliknę w "Zarządzanie" to otrzymuję dostęp do pionowego menu w którym mam listę dostępnych funkcji:

Pliki
Katalogi

Jak kliknę na "Pliki" to wyświetli mi się dodatkowo lista plików ale z tego poziomu mam też dostęp do pozostałych funkcji tj. dodaj plik / usuń / szczegóły
Budowa URL dla poszczegolnych akcji wygląda następująco:

/zarzadzanie/pliki/index
/zarzadzanie/pliki/dodaj
/zarzadzanie/pliki/usun/id
/zarzadzanie/pliki/szczegoly/id

Laravel nie wspiera takiej budowy aplikacji, ale z tego co wiem to chyba pozwala na to Symfony Framework.

Jakie są wasze doświadczenia w budowaniu aplikacji z nazwijmy to 3 poziomowym dostępem do funkcji ?

konto usunięte

Temat: moduł / controler / akcja - 3 poziomowy dostep do funkcji

Wiesz, nie chce być złośliwy ale może zanim zaczniesz korzystać z kolejnego egzotycznego frameworka (obstawiam że egzotyczny bo go w życiu na oczy nie wiedziałem) to może weź otwórz ich stronę internetową, zajrzyj w dokumentację i otwórz rozdział o routingu. Dotarcie do tych informacji zajęło mi kilka sekund. To to ?

http://laravel.com/docs/routing

Wygląda na to że podobnie jak w innych frameworkach, sam sobie definiujesz reguły więc coś mi się widzi że Twój problem wynika z ograniczeń które sam sobie narzuciłeś.

To jakie masz menu nie powinno mieć nic do rzeczy.Dariusz Półtorak edytował(a) ten post dnia 23.10.12 o godzinie 15:07
Daniel Częstki

Daniel Częstki senior php developer

Temat: moduł / controler / akcja - 3 poziomowy dostep do funkcji

Darek. Ale ja to wiem i mam już to zrobione.
Byłem ciekawy nie rozwiązania w konkretnym frameworku ale sposobów jakich uzywacie na rozwiązanie powyższego problemu w innych frameworkach.Daniel Częstki edytował(a) ten post dnia 23.10.12 o godzinie 20:53

konto usunięte

Temat: moduł / controler / akcja - 3 poziomowy dostep do funkcji

Sposobów jest tyle ile problemów. U np routing jest zautomatyzowany. Kiedy buduje stronę www mogę wpasować dowolny URL a wzór jest taki:

/anything/you/want//p1/v1/p2/v2/...

Znaczy adres www jest oddzielony od parametrów za pomocą // a budowaniem całej struktury zajmuje
się wyspecjalizowany moduł.

Podział w aplikacji mam prosty. Moduł, kontroler i akcja. Przy czym kontroler może mieć nadany typ. Typ to nic innego jak informacja o środowisku w jakim chcesz uruchomić moduł. Przykładowo jak moduł ma obsługiwać komunikację w formacie JSON, chcę by wszystko, łącznie z dowolnymi błędami było serwowane w postaci JSON. Dlatego moduł ten inicjuje dedykowaną obsługę błędów i shutdown funciton.

Problem był prosty, jak rozróżnić to czy adres w pasku ma odpalić moduł czy jest adresem strony WWW ? Rozwiązałem to tak że przy poziomie pierwszym ("anything" u góry) aplikacja oczekuje "komendy". Powiedzmy że w konfiguracji ustalę że jest to literka c. I w ten sposób:

/anything/you/want/ - będzie się odwoływało do strony WWW o takim adresie
/c/anything/you/want/ - będzie szukało modułu anything, kontrolera you i akcji want

Zrobiłem tak dlatego że mało kiedy potrzebuje niestandardowe adresy a ten system się zadziwiająco dobrze sprawdza.

konto usunięte

Temat: moduł / controler / akcja - 3 poziomowy dostep do funkcji

Nie czaję o co chodzi.
Rozmawiacie o routingu czy o strukturze/architekturze?
Daniel Częstki

Daniel Częstki senior php developer

Temat: moduł / controler / akcja - 3 poziomowy dostep do funkcji

mi chodzi o architekture

konto usunięte

Temat: moduł / controler / akcja - 3 poziomowy dostep do funkcji

Daniel Częstki:
mi chodzi o architekture

Akurat jedno i drugie powinno mieć ze sobą niewiele wspólnego. W moim wypadku powiązanie wynika z reguły w routerze ale nie jest to jakieś sztywne rozwiązanie.

konto usunięte

Temat: moduł / controler / akcja - 3 poziomowy dostep do funkcji

No to teraz wiem co powiedzieć :)

Przykładowo, S2 używa logicznych identyfikatorów, które potem są mapowane na klasy

VendorNameBundle:Controller:index = \Vendor\NameBundle\Controller\HelloController::indexAction()


W swoich projektach używam czegoś podobnego, aczkolwiek mniej restrykcyjnego, przykładowo:

foo1:foo2:...:fooN:HelloController:index = \foo1\foo2\...\fooN\controller\HelloController::index()


Jedyne ograniczenie to, że w logicznym identyfikatorze muszą wystąpić co najmniej dwa dwukropki, górnej granicy nie ustalałem, czyli:

foo:HelloController:index = \foo\controller\HelloController::action()


W jednym projekcie mogę mieć różne struktury - teoretycznie może to wprowadzać chaos, ale w praktyce jest porządeczek.

Taka informacja (logiczny identyfikator) ma trafić z routera do reszty systemu - skąd ją weźmie router, nie jest istotne (przyjazny link, zwykły, czy parametr z konsoli)

[edit]
Używając nomenklatury z tytułu wątku, wychodzi że mam 2+N poziomów :)Michał Wachowski edytował(a) ten post dnia 23.10.12 o godzinie 23:08
Daniel Częstki

Daniel Częstki senior php developer

Temat: moduł / controler / akcja - 3 poziomowy dostep do funkcji

O własnie Michał - dzięki. W Laravel też w sumie jest obsługa tzw. bundle, które mógłbym wykorzystać i nie miałbym problemu, tyle że idą jest że bundle stanowi jakby osobną podaplikację a nie moduł głównej aplikacji.

A ja się zastanawiam jak jeszcze w sensowny sposób można rozwiązać ten problem we frameworkach, które operują tylko na kontroler/akcja.

Następna dyskusja:

symfony - shell script - do...




Wyślij zaproszenie do