Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Pytanie odnośnie Controllera w MVC
Forum PHP.pl > Forum > PHP > Object-oriented programming
CuteOne
Witam,

i z góry przepraszam moderację za ogólny temat wątku ale szczerze nie wiedziałem jak inaczej go nazwać. Otóż przyglądając się ostatnio budowie Zenda natknąłem się na dość nie zrozumiałą dla mnie "rzecz".

Najpierw kawałek kodu:
  1. // Źródło "http://www.karolnowicki.pl/zend-framework/artykul/pokaz/system-logowania-w-zend-framework/"
  2. public function loginAction()
  3. {
  4. $form = new Form_Login();
  5. $form->setAction('/uzytkownicy/login')
  6. ->setMethod('post');
  7. if ($this->_request->isPost() && $form->isValid($_POST)) {
  8. // pobieramy dane z formularza
  9. $data = $form->getValues();
  10. // pobieramy domyślny adapter bazy danych
  11. $db = Zend_Db_Table::getDefaultAdapter();
  12. // tworzymy instancję adaptera autoryzacji
  13. $authAdapter = new Zend_Auth_Adapter_DbTable($db, 'uzytkownicy', 'email', 'haslo');
  14. // wprowadzamy dane do adaptera
  15. $authAdapter->setIdentity($data['email']);
  16. $authAdapter->setCredential(md5($data['password']));
  17. // sprawdzamy, czy użytkownik jest aktywny
  18. $authAdapter->setCredentialTreatment("? AND status = '1'");
  19. // autoryzacja
  20. $result = $authAdapter->authenticate();
  21. if ($result->isValid()) {
  22. // umieszczamy w sesji dane użytkownika
  23. $auth = Zend_Auth::getInstance();
  24. $storage = $auth->getStorage();
  25. $storage->write($authAdapter->getResultRowObject(array(
  26. 'id', 'email', 'imie', 'nazwisko', 'rola'
  27. )));
  28. return $this->_redirect('/');
  29. } else {
  30. $this->view->loginMessage = "Niepoprawny login lub hasło";
  31. }
  32. }
  33. $this->view->form = $form;
  34. }


Jak widać jest to akcja logowania w kontrolerze UzytkownicyController.php. Tu pojawia się moje pytanie czy w kontrolerze powinno się podawać hmm jak by to nazwać... dane statyczne(nie mylić ze static ;p) takie jak:

$authAdapter = new Zend_Auth_Adapter_DbTable($db, 'uzytkownicy', 'email', 'haslo')
$authAdapter->setIdentity($data['email']);
$authAdapter->setCredential(md5($data['password']));
$storage->write($authAdapter->getResultRowObject(array(
'id', 'email', 'imie', 'nazwisko', 'rola'
)));

Wiem, że pytanie prosto z księżyca ale ni jak mi to nie pasuje do wzorca MVC gdzie kontroler "Odpowiedzialny jest za przetwarzanie zadań i wywoływanie właściwej akcji lub widoku".

ps. wiem, że PHP'owskie FW nie implementują "prawdziwego" MVC ale czy to oznacza, że dopuszczalne jest pakowanie takich rzeczy do kontrolera?
skowron-line
http://phpmagazyn.pl/wpis?id=19
Kod
Gruby i chudy, czyli model i kontroler pod lupą


Przykład z tego artykułu bardzo fajnie zobrazuje to o co pytasz.

edit:
Cytat
ps. wiem, że PHP'owskie FW nie implementują "prawdziwego" MVC ale czy to oznacza, że dopuszczalne jest pakowanie takich rzeczy do kontrolera?
To nie wina FW tylko programisty który go wykorzystuje.
by_ikar
Cytat
To nie wina FW tylko programisty który go wykorzystuje.


Nie programisty a języka, w którym osiągniecie mvc jest trudne, lub niemożliwe.
Crozin
Niezależnie od tego czy mamy do czynienia z grubym czy z chudym modelem, takie coś nie ma prawa znaleźć się w kontrolerze w przypadku gdy korzystamy z MVC.

@by_ikar: Jak język może ograniczać bądź utrudniać użycie wzorca z grupy architektonicznych?
skowron-line
Podpinam się do prośby @Crozin -a o wyjaśnienie tej tezy
Cytat
Nie programisty a języka, w którym osiągniecie mvc jest trudne, lub niemożliwe.
by_ikar
http://www.zyxist.com/pokaz.php/rozwazania_o_wzorcu_mvc oraz http://www.zyxist.com/pokaz.php/poeksperymentujmy_z_mvc

Póki co nigdzie nie widziałem tak zaimplementowanego mvc w php, gdzie istniałaby bezpośrednia komunikacja miedzy modelem a widokiem. Trudno coś takiego osiągnąć w php, i raczej narobiłoby to więcej problemów i utrudnień niż ułatwień. Napisałem trudne, lub niemożliwe. I praktycznie większość fw implementuje mvp, opisując to mvc.
Crozin
To, że MVC się w PHP nie przyjęło to jedno, a to że niby język miałby uniemożliwiać/mocno utrudniać jego użycie to drugie. Ja osobiście nie potrafię doszukać się żadnego specjalnego ograniczenia narzuconego przez samo PHP.
by_ikar
Cytat(Crozin @ 26.02.2012, 19:59:38 ) *
To, że MVC się w PHP nie przyjęło to jedno, a to że niby język miałby uniemożliwiać/mocno utrudniać jego użycie to drugie. Ja osobiście nie potrafię doszukać się żadnego specjalnego ograniczenia narzuconego przez samo PHP.


Więc odwrócę kota ogonem. Gdyby nie było żadnego utrudnienia, to w fw takich jak zf, czy sf; zaimplementowane byłoby raczej w miarę bardziej poprawne mvc, niż tak jak jest obecnie, czyli w większości przypadków mvp. Tak przynajmniej wygląda to od logicznej strony. Szczerze mówiąc, nie widzę sensu aby widok miał bezpośrednią komunikację z modelem i mógł się z nim komunikować dwustronnie.
CuteOne
Witam,

tak jak podejrzewałem przedstawiony przeze mnie przykład nijak ma się do MVC. Wszystkim udzielającym się w tym wątku serdecznie dziękuję - rozwialiście moje wątpliwości.

Temat uważam za zamknięty
Crozin
@by_ikar: Tak w ramach podsumowania: Palnąłeś głupotę, bo w PHP nie ma specjalnych ograniczeń uniemożliwiających implementację MVC.
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.