Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP]Interpretacja adresu - budowanie nazwy obiektu
olechafm
post 15.11.2011, 11:53:27
Post #1





Grupa: Zarejestrowani
Postów: 125
Pomógł: 2
Dołączył: 8.10.2010
Skąd: Poniemieckie miasto przesiedleńców

Ostrzeżenie: (0%)
-----


Mam link do aplikacji

nazwa.pl/produkty/pokaz/1

interpretuję je jako

nazwa.pl/kontroler/akcja/parametr

router rozbija adres i udostępnia je metodami dostępowymi pod odpowiednimi zmiennymi
  1. $kontroler;
  2. $akcja;
  3. $parametry; (array)

dispatcher który otrzymał obiekt routera wyciąga sobie z niego te dane i ma zapisane w swoich zmiennych, sprawdza czy są one poprawne (czy dany kontroler jest dozwolony, czy dla danego kontrolera istnieje dana akcja itp) i na tej podstawie albo wywołuje je zgodnie z podanymi danymi albo używa domyślnych albo wywala błąd że dany adres nie istnieje

dispatcher i router znajdują się w przestrzeni nazw Core odzwierciedlonej katalogiem root/Core

natomiast kontrolery znajdują się w przestrzeni nazw App odzwierciedlonej katalogiem root/App

ostatnią funkcją dispatchera, jeśli wszystko jest poprawnie, jest funkcja która wywołuje nowy obiekt kontrolera, zanim zacząłem używać przestrzeni nazw przy założeniu powyższych danych:

  1.  
  2. $kontroler="produkty";
  3. $akcja="pokaz";


funkcja ta wywoływała kontroler poprzez najprostsze:

  1.  
  2. $app=new $kontroler;


i w ten sposób tworzyłem obiekt kontrolera, teraz muszę się do niego odwołać w inny sposób, mianowicie

  1. $app = new \App\Produkty\Produkty();



żeby znalazł je autoloader

kontroler Produkty, znajduje się w katalogu root/App/Produkty/Produkty.php, folder App zawiera kilka modułów Produkty, Użytkownicy itd, odzwierciedlone w katalogach i przestrzeniach nazw np App\Produkty to przestrzeń nazw dla kontrolera Produkty;

w jaki sposób nazwę kontrolera "produkty" wyciągniętą z adresu zamienić na nazwę obiektu \App\Produkty\Produkty(), której muszę użyć by go wywołać...

oczywiście rozumiem, że do końca nie musi to być poprawne rozwiązanie (pewnie na pewno nie jest), ale próbuję ogarnąć przestrzenie nazw i PSR-0



nikt? nic?

Ten post edytował olechafm 15.11.2011, 12:32:09
Go to the top of the page
+Quote Post
wookieb
post 15.11.2011, 12:27:52
Post #2





Grupa: Moderatorzy
Postów: 8 989
Pomógł: 1550
Dołączył: 8.08.2008
Skąd: Słupsk/Gdańsk




Proszę wstawić bbcode.


--------------------
Go to the top of the page
+Quote Post
olechafm
post 17.11.2011, 14:44:05
Post #3





Grupa: Zarejestrowani
Postów: 125
Pomógł: 2
Dołączył: 8.10.2010
Skąd: Poniemieckie miasto przesiedleńców

Ostrzeżenie: (0%)
-----


no wstawiłem

nikt nic nie ma pomysłu?
Go to the top of the page
+Quote Post
wookieb
post 17.11.2011, 15:05:55
Post #4





Grupa: Moderatorzy
Postów: 8 989
Pomógł: 1550
Dołączył: 8.08.2008
Skąd: Słupsk/Gdańsk




Nie podbijaj tematu.


--------------------
Go to the top of the page
+Quote Post
olechafm
post 18.11.2011, 11:35:58
Post #5





Grupa: Zarejestrowani
Postów: 125
Pomógł: 2
Dołączył: 8.10.2010
Skąd: Poniemieckie miasto przesiedleńców

Ostrzeżenie: (0%)
-----


to może poproszę o przeniesienie do działu PHP?
Go to the top of the page
+Quote Post
mortus
post 18.11.2011, 13:25:12
Post #6





Grupa: Zarejestrowani
Postów: 2 178
Pomógł: 596
Dołączył: 25.09.2009
Skąd: Piwniczna-Zdrój

Ostrzeżenie: (0%)
-----


Chyba trochę przedobrzyłeś z przestrzeniami nazw, ale może taki był Twój zamiar, a może to taka specyfika architektury systemu. W każdym bądź razie jeśli nazwa przestrzeni nazw jest taka sama, jak nazwa kontrolera, to nie ma problemu, bo:
  1. $kontroler="produkty";
  2. $akcja="pokaz";
  3. $class = '\App\\'.ucfirst($kontroler).'\\'.ucfirst($kontroler);
  4. $app = new $class();
  5. $app->$akcja();

Problemy pojawiają się wówczas, gdy w jednej przestrzeni nazw np. Produkty, masz kilka różnych kontrolerów. Wówczas musisz przekazywać dodatkowy parametr w adresie URL, który będzie odzwierciedlał konkretną przestrzeń nazw, a ta z kolei będzie odzwierciedlać konkretny katalog (w katalogu App), w którym zgrupowane są odpowiednie kontrolery. Parametr ten możesz nazwać np. modułem.
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 12.06.2025 - 15:58