Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [mvc]poraz kolejny..., Pytanie o teorie
MadHatter
post
Post #1





Grupa: Zarejestrowani
Postów: 20
Pomógł: 1
Dołączył: 15.02.2007

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


Witam,

Mam pytanie czysto teoretyczne. Buduje strone i chce ja oprzec na wzorcu MVC. Wspieram sie Smarty i Pear przy tym. I teraz moje pytania.
1. Czy za widok maja byc odpowiedzialne tylko szblony smarty czy tworzyc do niego osobna klase?
2. Poza przypisaniem danych ktore uzyskuje z modelu, podstrony roznia sie tez wygladem(dokladnie tlami glownej tresci), jaka czesc MVC powinna byc odpowiedzialna za ustwienie przykladowego tla? Rozwazam dwa przypadki, nie wiem jednak ktory bylby "najczystrzy" jesli chodzi o zalozenia ww wzorca. Pierwszy to to ze poszczegolne metody kontrolera przypisauja do szablonu smarty, dane z modelu oraz w kazdje metodzie jest deklarowana zmienna odpowiadajaca za tlo strony i tak tez przypisywana do szablonow. Drugie rozwiazanie to takie, ze w akcjach kontrolera wogole nie zajmu je sie ustawianiem tla a tylko wyborem widokow. W takim przypadku jednak ilosc szablonow musialbym odpowiednio rozmnozyc.

Czytam dosc spro na temat mvc, moje doswiadczenie z frameworkiem cakePHP wcale nie rozwialo wszelkich watpliwosci jednak, przynajmniej tych teoretycznych. Rozumiem ze wzorzec jest raczej czyms abstrakcyjnym i elastycznym niemniej na forum znalazlem taka definicje widoku:

Cytat
Główna zasasda MVC jest to aby w modelu byl tylko kod php a w VIEW tylko html


Natomiast w jednym z rtykulow na wortalu opis brzmi juz tak:

Cytat
Widok powinien wykorzystywać model do pobrania danych, które będą wyświetlone. Typowo, widok powinien utworzyć instancje klas modelu i wywołać metody odpowiedzialne za pobranie odpowiednich danych. Tym, czego należy się wystrzegać w widoku, jest modyfikacja danych. Widok nie powinien zmieniać w żaden sposób stanu aplikacji. Powinien np. wyświetlać listę użytkowników, ale nie powinien ich dodawać ani usuwać.


Rozbieznosc jest wiec dosc spora...

Jak najlepiej wedug Was zarac sie za to, w przypadku niewielkiej aplikacji?

Z gory dzieki i pozdrawiam!
Go to the top of the page
+Quote Post
2 Stron V   1 2 >  
Start new topic
Odpowiedzi (1 - 19)
menic
post
Post #2





Grupa: Zarejestrowani
Postów: 493
Pomógł: 0
Dołączył: 14.06.2003
Skąd: Tomaszów Lubelski/Rzeszów

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


ech....
Ile razy to jeszcze będzie wałkowane?
Jest tyle pomysłów na to ilu jest programistów. Najlepiej to zacznij sam powoli pisac, próbuj rozne sposoby i wybierz ten, który ci bardziej do gustu przypadnie.


--------------------
Jak masz cos zrobic dobrze...
...To musisz zrobić to sam.

Uchwycić moment...
Go to the top of the page
+Quote Post
Cysiaczek
post
Post #3





Grupa: Moderatorzy
Postów: 4 465
Pomógł: 137
Dołączył: 26.03.2004
Skąd: Gorzów Wlkp.




http://forum.php.pl/index.php?showtopic=69281&hl=widok
W podanym wyżej topiku masz sporo teorii z przykładami. Gdzieś w połowie strony napisałem kilka zdań na temat różnych interpretacji elemantów składowych wzorca.

Pozdrawiam.


--------------------
To think for yourself you must question authority and
learn how to put yourself in a state of vulnerable, open-mindedness;
chaotic, confused, vulnerability, to inform yourself.
Think for yourself. Question authority.
Go to the top of the page
+Quote Post
MadHatter
post
Post #4





Grupa: Zarejestrowani
Postów: 20
Pomógł: 1
Dołączył: 15.02.2007

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


Bardzo dziekuje, tego watku nie wygrzebalem, coz widze tylko ze problem ma mase rozwiazan, ale przynajmniej wiem ze nie robie jakiegos karygodnego myslowego bledu chyba... winksmiley.jpg

Jeszcze raz dzieki i pozdrawiam!
Go to the top of the page
+Quote Post
sanchoo
post
Post #5





Grupa: Zarejestrowani
Postów: 161
Pomógł: 1
Dołączył: 11.02.2007
Skąd: Kraków

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


no to ja ma pytanie ... z klasy smile.gif
  1. <?phpclass A
  2. {
  3. }
  4. class B extends A
  5. {
  6. private zmienna;
  7. private $strona;
  8. public function getZmiana()
  9. {
  10. return $this->zmienna;
  11. }
  12. public function getStrona()
  13. {
  14. return $this->strona;
  15. }
  16. $this->strona=new C;
  17. }
  18. class C{$stronaC= $contlore->getStrona()->getZmiana(); // jak mam odwolac sie do elementu zmiennaw clasie B questionmark.gif bo to nie dziala :)}
  19.  
  20. $contlorer = new B;?>


Ps: gdyby ktos zajrzal do przedszkola byl bym wdzieczny smile.gif http://forum.php.pl/index.php?showtopic=74579&hl=

Ten post edytował sanchoo 13.08.2007, 12:17:17
Go to the top of the page
+Quote Post
Cysiaczek
post
Post #6





Grupa: Moderatorzy
Postów: 4 465
Pomógł: 137
Dołączył: 26.03.2004
Skąd: Gorzów Wlkp.




Przyjrzyj się definicji swojej klasy C, wogóle napisz jeszcze raz ten kod, tym razem poprawnie, bo wogóle to nie ma prawa działać.

Pozdrawiam.


--------------------
To think for yourself you must question authority and
learn how to put yourself in a state of vulnerable, open-mindedness;
chaotic, confused, vulnerability, to inform yourself.
Think for yourself. Question authority.
Go to the top of the page
+Quote Post
sanchoo
post
Post #7





Grupa: Zarejestrowani
Postów: 161
Pomógł: 1
Dołączył: 11.02.2007
Skąd: Kraków

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


faktycznie zle napsialem.. napsialem to z palca zeby tylko przedtsawic problem:

  1. <?php
  2. klasa A{
  3.  
  4. private $strona;
  5. getStrona() //pubiera strona
  6.  
  7. $this->strona = new B; //w konstruktorze
  8.  
  9.  
  10. }
  11.  
  12. classB
  13. {
  14.  
  15. private $zawartosc;
  16. getZawartosc() pobiera zawartosc;
  17. $this->zawartosc="KOT"; //w konstruktorze
  18.  
  19. }
  20.  
  21. clasa View{
  22. global contlorer;
  23.  
  24. $contlorer->getStrona()->getZawartosc(); // tak nie pobiera mi :( a zalezy mi aby pola byly private; //w konstruktorze
  25.  
  26.  
  27. }
  28.  
  29. $contlorer = new A;
  30. new View;
  31. ?>


Ten post edytował sanchoo 13.08.2007, 13:04:19
Go to the top of the page
+Quote Post
Sedziwoj
post
Post #8





Grupa: Zarejestrowani
Postów: 793
Pomógł: 32
Dołączył: 23.11.2006
Skąd: Warszawa

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


@sanchoo
Ty może już nie pisz, albo najpierw sprawdź czy to co podałeś działa.
Do tego użycie globali to debilizmy, gdy się bez nich spokojnie da obejść.


--------------------
Algorytmy w PHP, czy ktoś o tym słyszał?
Dlaczego tak mało kobiet programuje? ponieważ nie zajmują się głupotami.
Go to the top of the page
+Quote Post
sanchoo
post
Post #9





Grupa: Zarejestrowani
Postów: 161
Pomógł: 1
Dołączył: 11.02.2007
Skąd: Kraków

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


hehe tak jak mowilem chodzilo o kokreny przyklad smile.gif ogolnie.. klasa wywoluje klase nie mozliwe?? i inna klasa chce pobrac dane z klasy ktora wywola klasa... smile.gif .. co tu ma dzialac smile.gifquestionmark.gif
  1. <?php
  2. $this->zawartosc="KOT"; //w konstruktorze
  3. ?>

ale to chyba nie trzba wyjasniac smile.gif
no nie wazne... widze ze jak sie nie poda zerznietego kodu ktory sie "kompiluje" to ciezko zczaic o co komus chodzi... moze to i racja ... wsumie jak ktos napisze "pseudo kod" ktoremu wydaje sie jasny to nei koniecznie ktos moze zrozumiec o co chodzi... w kazdym razie poakzalm znajoemu z pracy... i jakos bez 2 zdan powiedzial mi co mam zrobic smile.gif
ale dzieki za zainteresowanie....
Go to the top of the page
+Quote Post
Sedziwoj
post
Post #10





Grupa: Zarejestrowani
Postów: 793
Pomógł: 32
Dołączył: 23.11.2006
Skąd: Warszawa

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


@sanchoo
Co ma działać, to że to co piszesz jest nie zgodne z żadnymi zasadami, po co dajesz komentarze, kiedy kod sam by to powiedział, a nie trzeba dodatkowo się nad tym wysilać, bo Tobie się nie chce pisać. Va nawet nie opisałeś słowami tego, tylko narzekasz i sugerujesz że osoby z tego grona są głupsze od Twojego kolegi z pracy.
A zrozum że po prostu nie chce się ludziom wnikać w czyjeś wywody, gdy są niejasne, wtedy chodzi nadinterpretacja i mozna zrozumieć że działa inaczej niż Ty myślałeś że to prezentujesz. Więc radził bym nauczyć się opisywać swoje problemy, czy pomysły w taki sposób aby dla innych były łatwo przyswajalne, bo nie chodzi tu o to aby utrudnić innym zrozumienie. A Twój "pseudokod" taki jest.


--------------------
Algorytmy w PHP, czy ktoś o tym słyszał?
Dlaczego tak mało kobiet programuje? ponieważ nie zajmują się głupotami.
Go to the top of the page
+Quote Post
sanchoo
post
Post #11





Grupa: Zarejestrowani
Postów: 161
Pomógł: 1
Dołączył: 11.02.2007
Skąd: Kraków

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


Cytat
to ciezko zczaic o co komus chodzi... moze to i racja ... wsumie jak ktos napisze "pseudo kod" ktoremu wydaje sie jasny to nei koniecznie ktos moze zrozumiec o co chodzi...

jesli wyszlo tak jak mowisze ze zasugerowalem smile.gif to przepraszam.. zadaje sobie sprawe ze inaczej jest zapytac kogos na zywo.. a inaczej przez forum gdzie pytanie musi byc bardzo dokladnie sprecyzowane.
Go to the top of the page
+Quote Post
sanchoo
post
Post #12





Grupa: Zarejestrowani
Postów: 161
Pomógł: 1
Dołączył: 11.02.2007
Skąd: Kraków

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


MVC a walidajca formularzy smile.gif
Chce zamknac walidacje w jednej klasie. Wydumalem to tak:
w pliku index.php:
  1. <?php
  2. include('class_control.php');
  3.  
  4. if(($walid = new walid())==true)
  5. {
  6.  
  7. $name = model::name_dzial($_GET['dzial']);
  8.  
  9. $control = new $name($name, $_GET['id'], $walid); //przekazuje obiket do kontolrera (kontolere jest dziedziczony do klasy podstawowej contolrera.
  10. }else echo "error";
  11. ?>

i clasa walid:

  1. <?php
  2. class walid
  3.  {
  4.  private $error=array();
  5.  
  6.  public function __construct() 
  7.  {
  8.  $this->error['dzial']=$this->id_dzial($_GET['dzial']); na samym poczatku przekazuje dzial w zaleznosci od dzialu bedzie rozna ilosc zm
    iennych... np bedzie trzbea dodasc shaslhe albo zabepzieczyc przed SQL Injection. Dlate tu spr. tylko dzial (czy to numer czy w bazie istenije)
  9.  
  10.  
  11.  
  12.  
  13.  
  14.  
  15.  if(in_array(false, $this->error))
  16.  {
  17.  $name = model::name_dzial($this->error['dzial']);
  18.  $control = new $name($name, 0);
  19.  exit();
  20.  }
  21.  return true; //to jest chyba nie potrzebne kod zatrzyma sie wyzej wywalajac odpowiedni widok ER
    ROR strona nie istnieje czy cos.
  22.  
  23.  }
  24. ?>



obiket walid loaduje w korzeniu kontolrera:
  1. <?php
  2. public $walid;
  3. public function __construct($dzial, $id, $walid)
  4.  {
  5.  $this->model= new model;
  6.  $this->walid=$walid;
  7. ?>


i teraz moge sobie wywolywac w contolrolerze np jesli chce zabezpieczyc sie przed SQL Injection to w klasie walidacji stworze sobie odpowiednia funkcje .. ktora zwroci mi juz sprawdzona wartosc do zapytania.

Pytanie czy to dobre rozwiazanie?? dzieki temu co prawadam unikam np global $walid itp... ale mvc zaczyna bardziej mi sie wiazac... walidacje trez bede stosowal w widoku wiec bede musial przekazac mu obiket smile.gif
Go to the top of the page
+Quote Post
menic
post
Post #13





Grupa: Zarejestrowani
Postów: 493
Pomógł: 0
Dołączył: 14.06.2003
Skąd: Tomaszów Lubelski/Rzeszów

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


Może TO ci pomoze. Na koncu jest przykład jak u siebie rozwiązałem problem validacji smile.gif


--------------------
Jak masz cos zrobic dobrze...
...To musisz zrobić to sam.

Uchwycić moment...
Go to the top of the page
+Quote Post
Speedy
post
Post #14





Grupa: Zarejestrowani
Postów: 651
Pomógł: 28
Dołączył: 4.12.2004

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


Cytat
Główna zasasda MVC jest to aby w modelu byl tylko kod php a w VIEW tylko html


Nie tylko HTML. Widok odpowiada za wyświetlanie i prezentację danych w każdej postaci - tj. XHTML, XML, RSS, PDF, XLS, CSV itd.
Nie odbywa się w nim pobieranie danych, ani też ich modyfikacja. Dane są wyłącznie prezentowane. Wg mnie, dla każdego typu prezentowanych danych powinien być utworzony osobny "subwidok".


--------------------
Sygnatura niezgodna z regulaminem.
Go to the top of the page
+Quote Post
sanchoo
post
Post #15





Grupa: Zarejestrowani
Postów: 161
Pomógł: 1
Dołączył: 11.02.2007
Skąd: Kraków

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


Cytat(Speedy @ 27.08.2007, 00:43:20 ) *
Nie odbywa się w nim pobieranie danych,
hmm.. widok w mvc ma dostep do modelu po co innego jak nie pobieranie danych? Jesli nie moze pobierac danych wtedy zostaje tylko opcja ze kontroler podaje mu dane.. a to juz nie jest MVC tylko ...wylecialo mi z glowy smile.gif Wzorzec gdzie kontlorer jest lacznikiem widoku i modelu. Oczyiwscie widok nie ma mozlwisci edycji danych!!Dodam z u mnie widok odpowiada za pobranie danych... i wrzucenie ich do smartow:)
Go to the top of the page
+Quote Post
menic
post
Post #16





Grupa: Zarejestrowani
Postów: 493
Pomógł: 0
Dołączył: 14.06.2003
Skąd: Tomaszów Lubelski/Rzeszów

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


@up: no czekam jaki to to jest wzorzec tongue.gif Bo banialuki piszesz...


--------------------
Jak masz cos zrobic dobrze...
...To musisz zrobić to sam.

Uchwycić moment...
Go to the top of the page
+Quote Post
sanchoo
post
Post #17





Grupa: Zarejestrowani
Postów: 161
Pomógł: 1
Dołączył: 11.02.2007
Skąd: Kraków

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


menic dzieki za info.
Zrobilem to mniej weicej tak: Model dziedziczy z klasy walid. I tam sobie odpoweidnio sprawdzam dane. Jesli jest jakis blad powiedzmy nick za krotki to zapisuje to tak. $this->error['nick']="Nick jest za krotki" Dzieki czemu pozniej laduje do smartow wyswietl przy nicku $model->getError("nick")... i po sprawie..
Podbnie jest rozwiazane w Ruby.
Niestey xml nie maielm zadnej stycznosci... raczej z jego zastoswaniem.. nie ta liga jeszcze winksmiley.jpg
Go to the top of the page
+Quote Post
Cysiaczek
post
Post #18





Grupa: Moderatorzy
Postów: 4 465
Pomógł: 137
Dołączył: 26.03.2004
Skąd: Gorzów Wlkp.




Chcesz powiedzieć, że zrobiłeś Model extends Validator ?
No bez jaj...


--------------------
To think for yourself you must question authority and
learn how to put yourself in a state of vulnerable, open-mindedness;
chaotic, confused, vulnerability, to inform yourself.
Think for yourself. Question authority.
Go to the top of the page
+Quote Post
sanchoo
post
Post #19





Grupa: Zarejestrowani
Postów: 161
Pomógł: 1
Dołączył: 11.02.2007
Skąd: Kraków

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


chcialem waldiacje zamnac w jedenj klasie smile.gif... tak mi polecil znajomy ktory siedzi kupe lat... zadalem kilka pytac wyzej jak uzywacie walidacje w mvc to tylko "menic" cos napisal.. a teraz psizesz "bez jaj" .. napisz jak ty to robisz bede wdzieczny... jak widac w temacie "pierwsze kroki"

  1. "Modelem nazywamy tą część kodu aplikacji, która jest odpowiedzialna za kontakt z danymi biznesowymi, gdziekolwiek są składowane
  2. (zwykle w relacyjnej bazie danych). Model nie tylko służy do pobierania i modyfikacji danych biznesowych, ale także zajmuje się ich spójnością i
  3. integralnością poprzez odpowiednie mechanizmy walidacji danych." na:
http://blog.zabiello.com/articles/2007/01/...mplates-and-mvcno mogl bym tam osbne funkcje zaladowac do walidacji... ale wydawalo mi sie bardziej estetycznie jesli walidacja bedzie w osobnym pliku jako klasa... dlaczego to jest zle roziazanie?

Ten post edytował sanchoo 27.08.2007, 14:43:38
Go to the top of the page
+Quote Post
Cysiaczek
post
Post #20





Grupa: Moderatorzy
Postów: 4 465
Pomógł: 137
Dołączył: 26.03.2004
Skąd: Gorzów Wlkp.




Nie chodzi mi o to, że umieszczenie walidacji w modelu jest złe, a jedynie o sam fakt zaistnienia tutaj relacji dziedziczenia. Tu jedyną relacją jaka jest prawdiłowa, to zawieranie, czyli wg, podręcznika php - agregacja - Obiekt Modelu zawiera obiekt Validator.

Pozdrawiam.


--------------------
To think for yourself you must question authority and
learn how to put yourself in a state of vulnerable, open-mindedness;
chaotic, confused, vulnerability, to inform yourself.
Think for yourself. Question authority.
Go to the top of the page
+Quote Post

2 Stron V   1 2 >
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 Aktualny czas: 22.08.2025 - 04:38