návod na modely – začátečník

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
kall_ell
Člen | 13
+
0
-

Ahoj všem, chtěl bych se zeptat kde najdu nějaký popis nebo článek, jak fungují moduly. Vytvořit presenter, jsem již zvládnul, šablonu taky, ale v quick startu se mluví o modulech, které se ukládají do složky app/models/ ale zatím tam o tom není moc psáno. V příručce programátora je psáno jak na moduly, ale tento čánek tam také ještě není.

Etch
Člen | 403
+
0
-

Pozor Model není Modul.

bazo
Člen | 620
+
0
-

modul a model su dve rozlicne veci, tak sa najprv rozhodni. o moduloch sa dost pise na fore, tak skus pohladat, alebo v examples v distribucii je priklad na moduly

kall_ell
Člen | 13
+
0
-

tohle mám na mysli https://doc.nette.org/cs/quickstart
je tam psáno o modelu, ale není tam napsáno, kam ho mám uložit ani jak ho propojím s presenterem. Nějak to nechápu.

Etch
Člen | 403
+
0
-

Ještě uvedu příklad jednoduchého modelu.

class NewsModel extends Object implements INewsModel{
	public function getNews(){
		return dibi::query("SELECT * FROM [news]")->fetchAll();
	}

	public function getNew($id){
		return dibi::query("SELECT * FROM [news] WHERE [id] = %i", $id)->fetch();
	}
}

v presenteru se pak použije

$model = new NewsModel();

$this->template->items = $model->getNews();
// nebo
$this->template->items = $model->getNew($id);

model se vlastně stará o zpracování dat a předává je presenteru. Výhoda je v tom, že pokud potřebuji změnit práci s daty (třeba přechod na jinou DB struktůru) stačí, aby se vyměnil model za jiný který implementuje rozhraní INewsModel. Tedy stačí pouze změnit model, ale do presenteru nebude třeba zasahovat.

kall_ell
Člen | 13
+
0
-

Super, tak tohle chápu, ještě mě prosím napiš, kam ho mám uložit, pokud bych to bral stejně jako presenter a šablony pak bych ho měl uložit jako soubor News do složky app/models/, je to tak?

Editoval kall_ell (11. 3. 2010 15:36)

kall_ell
Člen | 13
+
0
-

A pak ještě jedna otázka, potřebuji vytvořit formulář výběru dat z DB. Ten formulář mám vytvořit v modelu? nebo v presenteru? Jestli to dobře chápu, tak sestavení toho formuláře by mělo být záležitostí modelu. Opravte mě jestli je to špatně.

Etch
Člen | 403
+
0
-

Ano třeba do /app/models, ale záleží na tobě kam je nahraješ. Stačí, aby modely byly v nějakém adresáři, který prochází RobotLoader.

Etch
Člen | 403
+
0
-

Osobně bych vytvořil formulář klasicky v presenteru

	public function createComponentForm(){
		$f = new AppForm();
		// ...
		return $f;
	}
kall_ell
Člen | 13
+
0
-

Díky za rady. Začínám s tím a mám ve spoustě věci nejasnosti. Tak se budu ptát, až zase na něco narazím, snad mě tu neukamenujete. :-)

redhead
Člen | 1313
+
0
-

Jen doplním, že název souboru by měl být shodný s názvem třídy

class NewsModel ⇒ NewsModel.php

kall_ell
Člen | 13
+
0
-

Zkouším si ten příklad v QS a vyhazje mě to následující chybu:

Cannot assign to an undeclared property TodolistPresenter::$todoManager.
Line 15:          public function getModel() {
Line 16:             if(!isset($this->todoManager))
Line 17:             $this->todoManager = new TodoManager;
Line 18:             return $this->todoManager;

Co je to za chybu? Červeně je označen řádek 17. model TodoManager mám vytvořený a uložený ve složce /app/models/TodoManagerModel.php.

bazo
Člen | 620
+
0
-

nemas deklarovanu premennu todomanager v tom presenteri, je to jasne napisane v tej chybovej hlaske

Editoval bazo (15. 3. 2010 14:01)