![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 5 Pomógł: 0 Dołączył: 16.09.2007 Skąd: Poland Ostrzeżenie: (0%) ![]() ![]() |
Chodzi o rozszezenie obiektu bedącego wynikiem zapytania do bazy. Mamy jakiś model np.:
Kod class News extends Zend_Db_Table_Abstract { protected $_name = 'News'; function getNewsByTitle($title) { $where = array('title = ?' => $title); return $this->fetchRow($where); } } Kontroler Kod class News_Controller_Action extends Zend_Controller_Action { function indexAction() { $this->view->news->$this->_dbNews->getNewsByTitle('Alamakota'); } } Kod oczywiście jest mocno uproszczony. Jak dotąd wszystko proste i przyjemne. Założmy jednak że chcę rozszerzyć zwrócony mi przez model obiekt. Załóżmy, że w widoku chcę mieć galerię, ale jej elementy wyświelić dopiero jeśli do newsa są dodane jakiekolwiek zdjęcia. Chciałbym to sprawdzić w widoku za pomocą metody $this->news->hasGallery(). I tu zaczynają się problemy. Nie moge dodąc po prostu metody do zwróconego obiektu. Najczęstszą radą jest zrobienie modelu w dwóch klasach: jedna obłsuguje praktycznie tylko CRUD, i druga, która obsługuje obiekt pierwszej, tam tworzymy sobie dodatkowe metody i ten właśnie obiekt zwracamy do kotrolera i do widoku. Otrzymujemy coś na kształt: Kod class NewsGateway extends Zend_Db_Table_Abstract { protected $_name = 'News'; function getNewsByTitle($title) { $where = array('title = ?' => $title); return $this->fetchRow($where); } } Kod class News { protected $_name = 'News'; function __construct(NewsGateway $news) { $this->galleryGateway = new GalleryGateway(); $this->title = $news->title $this->preface = $news->preface // etc. kolumny z tabeli news } function isGallery() { $this->galleryGateway->isGallery(NewsGateway); } } Kontroler Kod class News_Controller_Action extends Zend_Controller_Action { function indexAction() { $news->$this->_dbNews->getNewsByTitle('Alamakota'); $this->view->news = $this->News($news); } } Oczywiście po raz kolejny kod mocno uproszczony. Chodzi tylko o pewne zobrazowanie. Głowne zarzuty przeciw takiemu rozwiązanie: - nie powinno dopuszczać widoku do manipulownia na danych, a np. utworzenie metody getChild() dla pobrania jakiegoś potomka już jest taką manipulacją - zbyt mocne powiązanie modelu z bazą w tabeli - teoretycznie powinien byc gotowy do przyjecia danych także z innych źródeł np. XML Bardzo proszę o radę w tej sprawie. Jak wy radzicie sobie z takim problemem? Z góry dziękuję za pomoc. Ten post edytował highlander82 7.04.2009, 12:18:55 |
|
|
![]()
Post
#2
|
|
![]() Administrator wortalu Grupa: Przyjaciele php.pl Postów: 960 Pomógł: 39 Dołączył: 21.10.2003 Skąd: Kraków Ostrzeżenie: (0%) ![]() ![]() |
Rozszerz sobie tak samo odpowiednio Zend_Db_Table_Rowset / Zend_Db_Table_Row - opis w manualu.
|
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 20.06.2025 - 13:09 |