načtení modelu do presenteru

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

Mohl by mi někdo poradit jak správně načítat model do presenteru
v souboru VypisyModel.php mám níže uvedené

class VypisyModel
{

  public static function insert($data)
{
   return dibi::query('INSERT INTO [vypisy]', $data);
}


}

do presenteru jsem zkoušel model načítat tímto způsobem

	public function newTasklistFormSubmitted(Form $form)
	{
		$data = $form->getValues();
    $data['nazev'] = $data->title;

**  $mod = new VypisyModel;
        $this->data = $mod->insert($data);**


   	$this->flashMessage('Seznam úkolů založen.', 'success');
		$this->redirect('this');
	}

zkoušel jsem i zápis

VypisyModel::insert($data);

ale vždy se mi zobrazí jen chyba Class ‚VypisyModel‘ not found

umrlec
Člen | 56
+
0
-

Jestli máš ten presenter v nějakém namespace, tak zkus $mod = new \VypisyModel; popř \VypisyModel::insert($data)

Editoval umrlec (23. 3. 2012 11:45)

Taps
Člen | 168
+
0
-

namespace nepoužívám

duke
Člen | 650
+
0
-

Zkus promazat cache robotLoaderu (zpravidla v adresáři temp/cache/_Nette.RobotLoader).

hAssassin
Člen | 293
+
0
-

kdyz uz tu metodu mas statickou tak ji i staticky volej, ne? takto:

** // $mod = new VypisyModel; <- tohle zakomentuj
$this->data = VypisyModel::insert($data); // <- sem pridej staticky volani **

EDIT: sorry, umrlec to uz vlastne psal, sem si nevsim :-[

Editoval hAssassin (23. 3. 2012 12:27)

Taps
Člen | 168
+
0
-

hAssassin
Jak by tedy měl vypadat správný zápis statického volání ? Měl jsem za to, že níže uvedený zápis je v pořádku

$this->data = VypisyModel::insert($data);
Tomáš Votruba
Moderator | 1114
+
0
-

Jestli mohu doporučit, využil bych možnosti DI a čerstvého návodu pro načítání modelu. Jde cool jít s dobou :)

birkof
Člen | 15
+
0
-

Proč se v úvodním tutoriálu model připojuje přes factories a zde jinak? Jaký je mezi tím rozdíl?

bojovyletoun
Člen | 667
+
0
-

Velký rozdíl. Služba vytvořená pomocí services je sdílená, tzn. služba (např. objekt Texy) se jednou vytvoří a pak se k ní přistupuje pomocí $container->sluzba a vrací vždy ten samý objekt. Když je služba definovaná v factories, tak se ke službě přistupuje pomocí $conteiner->createSluzba() a jak název napovídá, vytváří se vždy nová instance.

V souvislosti s Nette\Database: Vetšinou jako služby se definují rovnou Selection, je důležité vědět, že volání metod (např where) na ní způsobí, že i původní objekt se mění. Více zde. Kdyby byly tabulky byly definovány jako sdílené, tak by mohlo přinést divné chování…

Zde jsem psal o tom, jak by taková konfigurace mohla vypadat: