Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [klasy] Router i inne
Forum PHP.pl > Forum > PHP
bim2
napisałem coś przykładowego w MVC, powiem że jest super (xtrim.info) ale bardzo wolno działa. Dlatego napisze to od nowa i pożądnie. I mam problem. Do czego słuzy router. Myśle że do pobrania zmiennych z adresu i post? I np wywowłam $rt->getPost('nazwa_posta', 'int etc.'); O to chodzi? Moglibyście mi dokładnie wytłumaczyć co i jak?

I jeszcze co ma być bazą danych? Robic osobną klasę tak aby jeżeli zmienie baze to tylko jeden wpis zmieniam? Czy korzystać z PDO? Jestem początkujący w PRO ale postaram się wszystko zrozumieć.
dr_bonzo
1. "klasy" nie "clasy"
2. zeby pisac na php pro trzeba umiec googla wykorzystywac http://www.google.com/search?client=opera&...-8&oe=utf-8

Przenosze
bim2
Sorka dr_bonzo tylko ze po przeczytaniu paru artów ja nadal nie wiem jak zbudować router? Jak to ma wyglądać? $rt->getPost czy $rt->get('nazwa', 'post lub get', 'safe_mode true lub false'); Prosze o wytłumaczenie jakieś. I jak zrobić z themem aby móc w akcji czy modelu dodać coś do <head>. Narazie robiłem tak:
$tpl->setTpl('indeg_up.tpl');
$ctrl->setAction('index');
$tpl->setTpl('indeg_down.tpl');
Jest inny sposób? Pewnie odeślecie mnie do gogle tklyo że ja bardzo bym prosił o wytłumaczenie co i jak. sadsmiley02.gif
thornag
Ja po przegryzieniu Rapide'a Prph i po powierzchownym przejsciu przez Zenda zdecydowalem sie na rozwiazanie jak we wspomnianych frameworkach.

Router to klasa ktora pobiera parametry z adresu i tworzy token dla dispatchera. Token ten zawiera w sobie nazwe kontrolera akcji i parametry. Dalej jest przekazywany do wspomnianego dispatchera ktory ustawia kontroller i uruchamia jego akcje. Akcja juz sobie sama radzi z modelami i w zaleznosci od jej wyniku ustawia szablon badz forwarduje do nastepnej akcji.

Co do szablonow to jeszcze nie wpadlem na zadne dobre rozwiazanie bo najpierw chce pozadnie skonczyc framea. Poki co robie sobie plik szablonu ktory wyswietla mi widok a w tym szablonie (smarty) proste include dla header i footer.

Co do PDO. Zastanow sie czy przewidujesz zmiane bazy, jesli projekt nie jest duzy i nie masz zamiaru zmieniac bazy to po co angazowac jakies wielkie silniki do tego ? Napisz sobie jakies proste i wydajne DAO ewentualnie jesli zdecydujesz zmienic baze to sobie napiszesz nowe z zachowaniem interfejsu.

P.S. Na stronie raczej netykieta nie nietykieta
bim2
Thornag dziex. Ale miałeś takiego pecha że własnie weszłem bo skończyłem przeglądać rapid (świetne rozwiązania). DAO nie wiem jak? Ma być takie coś $dao->query('* lub array("nick", "haslo")', 'tabela' array('parametry' = ' = lol', 'where' => ' nick = lol')); Jak? Wykorzystam pare pomysłów z rapide, ale jeszcze będziecie musieli mi pomóż biggrin.gif

1. DAO jak? tongue.gif
2. Co robi Dispratcher (jakoś tak, w rapide był)
3. Token, o co chodzi, klasa Token?
4. Helpery?

Popiszcie się Ci bardzije i mniej zaawansowani bo ja przy was jestem cienias haha.gif

Pozdrawia ciekawski BIM

Nikt nie odpowiada sad.gif

No ale dopsize kolejne pytanie. Widziałem w rapide ze jest rapide/jakasklasa/klasa.class.php i rapide/jakas_klasa/interfence.php

I wyowływane jest to tak: public function jakas(Rapide_jakasklasa_interfence $oInter) {} Czy to cos ala new?
Prph
Cytat(bim2 @ 22.09.2006, 17:16:13 ) *
public function jakas(Rapide_jakasklasa_interfence $oInter) {} Czy to cos ala new?


Nie. To jest kontrola typow. Przyklad:

  1. <?php
  2. interface InterfejsA
  3. {
  4. public function funkcja();
  5. }
  6.  
  7. class A implements InterfejsA
  8. {
  9. public function funkcja()
  10. {
  11. echo 'ppp';
  12. }
  13. }
  14.  
  15. class B
  16. {
  17. public function funkcja() {};
  18. }
  19.  
  20. class C implements InterfejsA
  21. {
  22. public function InnaFunkcja();
  23. }
  24.  
  25. class Test
  26. {
  27. public function testInterfejsu(Interfejs A $oA){}
  28. }
  29. // Sprawdz to:
  30.  
  31. $oTest = new Test;
  32. $oTest->testInterfejsu(new A);
  33. $oTest->testInterfejsu(new B);
  34. $oTest->testInterfejsu(new C);
  35. ?>


Zapewnia, ze dla danej metody trafi dokladnie obiekt zadanego typu.

Adrian.
thornag
Co do DAO to chodzi o to zeby sobie przygotowac jakies API do obslugi bazy danych. Czyli robisz klase w ktorej masz metody typu getRow, getAll, insertRow itp, pozniej jak bedzie trzeba zmienic baze to nie zmieniach kodu aplikacji a jedynie implementacje klasy, reszta pozostaje ta sama. Przy zmianie pamietaj zeby interfejs byl taki sam i zeby metody tego interfejsu przyjmowaly te same argumenty i zwracaly to samo, inaczej nie obedzie sie bez zmiany kodu w aplikacji.
bim2
@prph żeby nie było że nie sprawdzam to masz błąd w class B tongue.gif później w C (
Fatal error: Non-abstract method C::InnaFunkcja() must contain body in C:\WebServ\httpd\tt.php on line 22) i na koniec :
z $oTest->testInterfejsu(new cool.gif; ale to miało być bo miało mi wyjaśnić tongue.gif Tylko w B był niezamierzony błąd ;]

Dao, już conieco rozumiem.
thornag
bim2 => Przeciez to byl tylko pseudokod dla Ciebie. Jakbys oznaczyl klasy jako abstrakcyjne to jak chcialbys je pozniej konkretyzowac smile.gif Dopisz cos do metod wtedy potestuj.
milus
Sorry thornag, ale z tego co napisałeś to wynika, że DAO jest czymś w rodzaju abtrakcji dla bazy danych. A tak chyba nie jest (przynajmniej mi się tak wydaje). Czy nie powinno to wyglądać w ten sposób, że dla każdej klasy obiektu biznesowego istnieje odpowiadająca mu klasa DAO, której zadaniem jest powbieranie danych z bazy, pliku tekstowego czy xml'a.
Czyli np. dla klasy NewsModel powinna istnieć klasa NewsModelDAO. Która to posiada takie metody jak getNews, getAllNews, a nie getRow czy getAll.
Przynajmniej tak mi się wydaje, że to tak powinno mniej więcej wyglądać, ale jeśli się mylę to proszę o sprostowanie...
Sabistik
milus:
~thornag myli pojęcia (pisze o ADO). DAO polega dokładnie na tym jak przedstawiłeś.
thornag
Ups smile.gif....Tak macie racje, swoja droga dopeiro teraz mnie oswiecilo smile.gif, no ale zeby nie bylo tak ze post bez tresci mam pytanie.

U mnei zazwyczaj wyglada to tak ze model np News sam w sobie posiada metody do pobierania tych newsow itp, i w tych metodach korzysta z ADO :PPP. Nie mysallem nigdy nad rozwiazaniem by dostep do danych implementowac w osobnej klasie. Czy to jest czesto praktykowana technika ? Jaka jest jej przewaga mad implementowaniem metod dostepowych w samym modelu (w sensie klasy dla Newsow itp) ?
envp
Cytat(bim2 @ 22.09.2006, 17:16:13 ) *
2. Co robi Dispratcher (jakoś tak, w rapide był)
3. Token, o co chodzi, klasa Token?
4. Helpery?


Ad2. Dispatcher rozporządza (dyspozytor) - odpala akcje. Chodzi o to, że frontkontroler podaje akcje w postaci tokena do naszego dyspozytora, on z niego czyta informacje i odpala.
Ad3. Token to nic innego jak obiekt, ktory zawiera nazwę akcji, nazwę kontrolera, parametry. Taka akcja zrobiona na obiekt.
Ad4. Helpery - pomocniki - np. Masz helpera w postaci czegoś co tworzy ci formularze. Piszesz sobie klase do obslugi formularzy i potem dodajesz ja do fw i nie uzywajac html (tylko php) w kontrolerze tworzysz formularz i ladujesz go do widoku
Jarod
Cytat(thornag @ 22.09.2006, 16:46:18 ) *
Router to klasa ktora pobiera parametry z adresu i tworzy token dla dispatchera. Token ten zawiera w sobie nazwe kontrolera akcji i parametry. Dalej jest przekazywany do wspomnianego dispatchera ktory ustawia kontroller i uruchamia jego akcje.



Cytat(envp @ 26.10.2006, 10:34:12 ) *
Ad2. Dispatcher rozporządza (dyspozytor) - odpala akcje. Chodzi o to, że frontkontroler podaje akcje w postaci tokena do naszego dyspozytora, on z niego czyta informacje i odpala.

Kto ma racje?
Tyle pmysłów ile atków na tym forum na temat mvc, że już zgłupiałem..

Napisałem sobie router, który m.in. pobiera z urla nazwę kontrolera, nazwę akcji i parametry, następnie tworzy sobie token (jet to tablica asocjacyjna). I teraz nie wiem co dalej. Można by to od razu przekazywać do frontcontrollera, który odpalałby akcje. Po co dispatcher?
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.