Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Rejestracja controllera jako moduł w MVC
Forum PHP.pl > Forum > PHP > Object-oriented programming
GoldeNx3
Witam


Tworze stronę internetowa na podstawie modelu MVC. W jaki sposób mogę zrobić, aby każdy controller był jako moduł, w sensie abym mógł go w jakiś sposób zarejestrować i wyświetlić listę modułów czyli stron w panelu admina a w tym panelu mógł dodać potem opcje włączenia i wyłączenia controllera aby użytkownicy nie mogli na nią wejść. Czyli jak kontrolować każdy controller przez panel?
Pyton_000
Musisz mieć gdzieś listę kontrolerów. Obok true/false i tyle.

Przy wchodzeniu sprawdzasz czy jest na liście i jaką ma wartość. Domyślnie ustalasz że nie ma dostępu, dopiero jawne przypisanie true daje dostęp.

Albo BD albo plik jakiś, tak na prawdę co kolwiek.
GoldeNx3
Tak, tutaj nie ma problemu z tym. Tylko w którym miejscu stworzyć listę kontrolerów? W sensie nie mam pojęcia jak „otworzyć” pliki z kontrolerami bez ich wywołania. W autoloadzie dodaje tylko pliki z kontrolerami a w routingu je wywołuje. Ale wiadomo, wywołują się one pojedynczo w momencie wejścia na dany adres strony. Jak zrobić, aby od razu bez wywołania kontrolera one się dodawały do listy? Kurczę, ciężko mi opisać to co mam w głowie ale mam nadzieje, ze ktoś zrozumie.
b4rt3kk
Zaimplementuj sobie coś w rodzaju acl. Tzn. trzymaj w bazie nazwy wszystkich kontrolerów (możesz również to rozszerzyć na metody), w osobnej tabeli grupy uprawnień, a w kolejnej która grupa ma uprawnienie do którego kontrolera (i akcji/metody). I później prostym zapytaniem sprawdzasz czy dany user może korzystać z danego kontrolera.
GoldeNx3
Tak, ja wiem jak zablokować dostęp. Ale problem polega na tym jak zrobić listę kontrolerów i metod. W routerze wywołuje się kontroler jak wchodzi się na dana stronę, ale tylko będzie topojedynczy kontroler. Ale jak zrobić aby skrypt pobrał wszystkie kontrolery i metody za jednym razem? W autoloaderze pobieram z folderu kontrolerów pliki i includuje je, w tym momencie mogę pobrać kontrolery po nazwie plików i zapisać je np. W bazie ale jak pobrać dodatkowo metody z tych plików? Najgorsze jest to, ze ciężko mi to wytłumaczyć. Jutro podeśle kod jak to wyglada ale może do tego czasu ktoś odpowie na moje pytanie.
b4rt3kk
Cytat(GoldeNx3 @ 9.02.2018, 22:33:36 ) *
Tak, ja wiem jak zablokować dostęp. Ale problem polega na tym jak zrobić listę kontrolerów i metod. W routerze wywołuje się kontroler jak wchodzi się na dana stronę, ale tylko będzie topojedynczy kontroler. Ale jak zrobić aby skrypt pobrał wszystkie kontrolery i metody za jednym razem? W autoloaderze pobieram z folderu kontrolerów pliki i includuje je, w tym momencie mogę pobrać kontrolery po nazwie plików i zapisać je np. W bazie ale jak pobrać dodatkowo metody z tych plików? Najgorsze jest to, ze ciężko mi to wytłumaczyć. Jutro podeśle kod jak to wyglada ale może do tego czasu ktoś odpowie na moje pytanie.


A po co to pobierać? Aż tyle tego masz? Wpisz z palca do bazy. Jak już musisz to napisz sobie prosty skrypcki, który przeleci po wszystkich plikach w określonym katologu, otworzy je i przeleci po wszystkich metodach (użyj ReflectionClass).
GoldeNx3
W sumie masz racje, za bardzo kombinuje. Co prawda trochę tego jest ale nie będzie tragedii wpisać tego z palca. A jak w późniejszym czasie dodam jakiś kontroler to tez go mogę zawsze wpisać manualnie + mniejsze obciążenie zamiast sprawdzać każdy kontroler za każdym razem czy istnieje w bazie i dodawać go do bazy jeżeli on nie istnieje. Ale jeszcze pobawię się z reflectionclass, zawsze czegoś się nauczę, mimo wszystko bardziej byłbym usatysfakcjonowany jakby to wszystko odbywało się z automatu, z drugiej strony jak strona już będzie w 100% napisana to nie ma sensu za każdym razem sprawdzać czy dany kontroler istnieje w bazie kiedy wszystko już będzie w bazie. W sumie dobre rozwiązanie. Szukam sposobu na około a rozwiązanie znajduje się tak blisko ;d
b4rt3kk
Cytat(GoldeNx3 @ 9.02.2018, 23:14:02 ) *
W sumie masz racje, za bardzo kombinuje. Co prawda trochę tego jest ale nie będzie tragedii wpisać tego z palca. A jak w późniejszym czasie dodam jakiś kontroler to tez go mogę zawsze wpisać manualnie + mniejsze obciążenie zamiast sprawdzać każdy kontroler za każdym razem czy istnieje w bazie i dodawać go do bazy jeżeli on nie istnieje. Ale jeszcze pobawię się z reflectionclass, zawsze czegoś się nauczę, mimo wszystko bardziej byłbym usatysfakcjonowany jakby to wszystko odbywało się z automatu, z drugiej strony jak strona już będzie w 100% napisana to nie ma sensu za każdym razem sprawdzać czy dany kontroler istnieje w bazie kiedy wszystko już będzie w bazie. W sumie dobre rozwiązanie. Szukam sposobu na około a rozwiązanie znajduje się tak blisko ;d


No raczej uprawnienia powinny być nadawane świadomie, więc z automatu to trochę kiepski pomysł. Co najwyżej admin powinien mieć dostęp do wszystkich metod wszystkich kontrolerów, ale to możesz dodać samą nazwę kontrolera z gwiazdką dla metod (czyli dla wszystkich danego kontrolera). Wg mnie nie powinno być to automatyczne działanie, a raczej przemyślane, co może kto wyświetlać, więc dodawane z palca.
GoldeNx3
Chcialem po prostu sobie ułatwić i zrobić kontrolery na zasadzie pluginow które z panelu admina mogę włączyć i wyłączyć dla wszystkich użytkowników. Czyli dodaje nowy kontroler i automatycznie on ląduje w bazie razem z metodami. Ale dodawanie je z palca do bazy w sumie w miare rozwiązuje mój problem.
emillo91
Sam aktualnie jestem na etapie projektowania aplikacji wykorzystującej coś na zasadzie pluginów. W pewnym momencie doszedłem do etapu , w którym musiałem odnieść się do danej akcji kontrolera danego pluginu. Do akcji odnoszę się w ten sposób, że w bazie danych trzymam ścieżki do katalogów z pluginami i aby wywołać dany plugin to zamieniam ścieżkę na namespace i doklejam do niej nazwę klasy pluginu. Natomiast do akcji odnoszę się poprzez pobranie wszystkich metod publicznych i poprzez filtrowanie sprawdzam czy dana akcja istnieje w tym pluginie/ kontrolerze. Niestety nie da się chyba wyszukać akcji bez wywołania obiektu. Mówię oczywiście o routingu bez używania informacji zapisanych w pasku url czyli ?action=kontroler&method=metoda
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-2024 Invision Power Services, Inc.