Autor | Zpráva | ||
---|---|---|---|
Luke9 Profil |
#1 · Zasláno: 23. 8. 2013, 09:22:44
Ahoj,
právě se učím MVC, abych poté mohl přejít na jeden z frameworků a snažím se udělat si takový jednoduchý blog. Zasekl jsem se při výpisu všech článků. V modelu news_model.php mám metodu public function getNews(){ $data = $this->db->query("SELECT * FROM clanky"); $array = $data->fetchAll(); return $array; } v controlleru news.php volám $this->loadModel("news"); $this->data = $this->model->getNews(); $this->view->render("news"); A teď potřebuju nějak předat data z db do view, abych je mohl zobrazit a nevím úplně přesně jak. Jestli mít ještě funkci render s dvouma argumentama, abych je pomocí toho předal a pak už je ve view zobrazil nebo jak to je vlastně správně. Předem díky za odpovědi. |
||
aDAm Profil |
#2 · Zasláno: 23. 8. 2013, 09:32:11
Tak pokud se ti o render stará nějaký šablonovací systém tak $this->data předej tomu šablonovacímu systému např $smarty->assign($this->data)
|
||
Luke9 Profil |
#3 · Zasláno: 23. 8. 2013, 09:35:07
MVC jsem se učil z těchto tutoriálů: http://www.youtube.com/watch?v=2Eu0Nkpo6vM&list=PL7A20112CF84B2229, tam se žádný šablonovací systém nepoužívá.. :( a vlastně ani nevím co to je
|
||
Joker Profil |
#4 · Zasláno: 23. 8. 2013, 10:10:50
Luke9:
No a jakým způsobem je tam realizovaná view? (Nemám čas procházet přímo ty tutoriály.) Teoreticky podle MVC architektury by to mělo být tak, že view dostane odkaz na model a z něj si vytahá co potřebuje. Viz zde: Tohle právě zajistí ta šipka mezi view a modelem: „View má přímý odkaz na Model, aby mohl jeho data zobrazit“ Zhruba takhle funguje například Microsoftí ASP.Net MVC. I když tam se do view obvykle neposílá skutečný „business“ model, ale spíš viewmodel. Čili „podle teorie“: Controller na základě požadované akce získá odpovídající Model, vybere odpovídající View a předá mu odkaz na model. View dostane model, vytahá si z něj data a prezentuje. Menší zádrhel je, že když View dostane odkaz na samotný „business“ model, získá fakticky i možnost s tím modelem nějak manipulovat (nejen číst, ale i dělat změny), což podle teorie View dělat nesmí. Maličko jiný přístup, který je běžný v ASP.Net MVC: Controller na základě požadované akce vybere odpovídající viewmodel a s pomocí servisní vrstvy, ve které je skutečný model zařídí jeho naplnění daty a předá ho do view. Dál je to stejné. To co zmiňuje aDAm se šablonovacím systémem by se dalo teoreticky popsat tak, že „schránka pro data“, takže vlastně „viewmodel“ je přímo součástí View a Controller tam naplní data z Modelu (akorát místo aby předával odkaz na nějaký objekt bere jednotlivé položky a plní je do View). |
||
Luke9 Profil |
#5 · Zasláno: 23. 8. 2013, 10:33:14
Joker:
Jediné, co má view v sobě, je metoda render public function render($name){ require "view/header.php"; require "view/" . $name . ".php"; require "view/footer.php"; } |
||
Keeehi Profil |
#6 · Zasláno: 23. 8. 2013, 10:43:08
public function render($name, $data) a v view/aktualni_view.php mít if (isset($data["db_data"])) { $tabulka = $data["db_data"]); foreach ( $tabulka as $radek ) { ... } } ale celé je to takové nepěkné |
||
Luke9 Profil |
#7 · Zasláno: 23. 8. 2013, 11:44:32
Keeehi:
Přesně něco takového jsem si myslel, že mám udělat, jen jsem si nebyl jistý, jestli je to správně. |
||
Časová prodleva: 11 let
|
0