Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [klasy] Router i inne, .. do czego słuzą i jak zbudować
bim2
post
Post #1





Grupa: Zarejestrowani
Postów: 1 873
Pomógł: 152
Dołączył: 9.04.2006
Skąd: Berlin

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


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ć.
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 13)
dr_bonzo
post
Post #2





Grupa: Przyjaciele php.pl
Postów: 5 724
Pomógł: 259
Dołączył: 13.04.2004
Skąd: N/A

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


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
Go to the top of the page
+Quote Post
bim2
post
Post #3





Grupa: Zarejestrowani
Postów: 1 873
Pomógł: 152
Dołączył: 9.04.2006
Skąd: Berlin

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


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. (IMG:http://forum.php.pl/style_emoticons/default/sadsmiley02.gif)
Go to the top of the page
+Quote Post
thornag
post
Post #4





Grupa: Zarejestrowani
Postów: 504
Pomógł: 2
Dołączył: 31.03.2006
Skąd: Londyn

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


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

Ten post edytował thornag 22.09.2006, 16:53:05
Go to the top of the page
+Quote Post
bim2
post
Post #5





Grupa: Zarejestrowani
Postów: 1 873
Pomógł: 152
Dołączył: 9.04.2006
Skąd: Berlin

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


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óż (IMG:http://forum.php.pl/style_emoticons/default/biggrin.gif)

1. DAO jak? (IMG:http://forum.php.pl/style_emoticons/default/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 (IMG:http://forum.php.pl/style_emoticons/default/haha.gif)

Pozdrawia ciekawski BIM

Nikt nie odpowiada (IMG:http://forum.php.pl/style_emoticons/default/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?
Go to the top of the page
+Quote Post
Prph
post
Post #6





Grupa: Zarejestrowani
Postów: 338
Pomógł: 2
Dołączył: 4.03.2006
Skąd: Łódź

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


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.
Go to the top of the page
+Quote Post
thornag
post
Post #7





Grupa: Zarejestrowani
Postów: 504
Pomógł: 2
Dołączył: 31.03.2006
Skąd: Londyn

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


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.
Go to the top of the page
+Quote Post
bim2
post
Post #8





Grupa: Zarejestrowani
Postów: 1 873
Pomógł: 152
Dołączył: 9.04.2006
Skąd: Berlin

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


@prph żeby nie było że nie sprawdzam to masz błąd w class B (IMG:http://forum.php.pl/style_emoticons/default/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 (IMG:http://forum.php.pl/style_emoticons/default/cool.gif) ; ale to miało być bo miało mi wyjaśnić (IMG:http://forum.php.pl/style_emoticons/default/tongue.gif) Tylko w B był niezamierzony błąd ;]

Dao, już conieco rozumiem.
Go to the top of the page
+Quote Post
thornag
post
Post #9





Grupa: Zarejestrowani
Postów: 504
Pomógł: 2
Dołączył: 31.03.2006
Skąd: Londyn

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


bim2 => Przeciez to byl tylko pseudokod dla Ciebie. Jakbys oznaczyl klasy jako abstrakcyjne to jak chcialbys je pozniej konkretyzowac (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) Dopisz cos do metod wtedy potestuj.
Go to the top of the page
+Quote Post
milus
post
Post #10





Grupa: Zarejestrowani
Postów: 16
Pomógł: 0
Dołączył: 15.04.2006

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


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...
Go to the top of the page
+Quote Post
Sabistik
post
Post #11


Administrator wortalu


Grupa: Przyjaciele php.pl
Postów: 960
Pomógł: 39
Dołączył: 21.10.2003
Skąd: Kraków

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


milus:
~thornag myli pojęcia (pisze o ADO). DAO polega dokładnie na tym jak przedstawiłeś.
Go to the top of the page
+Quote Post
thornag
post
Post #12





Grupa: Zarejestrowani
Postów: 504
Pomógł: 2
Dołączył: 31.03.2006
Skąd: Londyn

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


Ups (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) ....Tak macie racje, swoja droga dopeiro teraz mnie oswiecilo (IMG:http://forum.php.pl/style_emoticons/default/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) ?
Go to the top of the page
+Quote Post
envp
post
Post #13





Grupa: Zarejestrowani
Postów: 359
Pomógł: 1
Dołączył: 16.04.2006
Skąd: Łódź

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


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
Go to the top of the page
+Quote Post
Jarod
post
Post #14





Grupa: Zarejestrowani
Postów: 1 190
Pomógł: 27
Dołączył: 23.04.2005

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


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?
Go to the top of the page
+Quote Post

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

 



RSS Aktualny czas: 23.08.2025 - 13:11