Spojení presenteru s modelem

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

Ahoj,

chtěl bych se zeptat jak spojit model s presenterem.

Mám model

class PageModel extends BasePresenter{

	public function getAllCategory() {
    	return $this->db->query('SELECT * FROM [category] ORDER BY [id] ASC')->fetchAll();
    }
}

Mám presenter

class CategoryPresenter extends BasePresenter{

	public function renderShow($url){
		$this->template->url = $url;
	}
}

A chtěl bych z CategoryPresenter spojit s PageModel tak abych mohl použít do šablony getAllCategory().

Zkoušel jsem to takto

class CategoryPresenter extends BasePresenter{

	public function renderShow($url){
		$model = new PageModel;

		$this->template->data = $model->getAllCategory();
		$this->template->url = $url;
	}
}

Ale bohužel pokaždé to vyhodí chybu, že PageModel neexistuje. Co dělám špatně. Nette 2.0.3.

Děkuji za každou radu

Editoval Rogue (4. 5. 2012 2:02)

Vojtěch Dobeš
Gold Partner | 1316
+
0
-
  1. Proč tvůj PageModel extenduje BasePresenter? To je nesmysl.
  2. Pokud to vyhodí chybu, že PageModel neexistuje, je to tím, že nenašel tu třídu. Není třeba v nějakém namespace? Nebo naopak není v namespace ten CategoryPresenter?
  3. Nejlepší řešení je zaregistrovat si takový PageModel jako službu. Tedy v config.neon zapsat:
services:
	pageModel:
		class: PageModel # nebo pokud je v namespace, tak samozřejmě celý název včetně namespace

A v presenteru už pak jen:

$this->template->data = $this->context->pageModel->getAllCategory();
castamir
Člen | 629
+
0
-

Jak moc zastaralé jsou následující zápisy?

services:
	pageModel: PageModel

a v presenteru:

$this->template->data = $this->getService("pageModel")->getAllCategory();

jinak předpokládám, že máš následující strukturu:

/app
	/presenters
		/CategoryPresenter.php
/model
	/PageModel.php

Pokud ano, tak postupuj podle vojtova nebo mého postupu a v PageModel přepiš extends BasePresenter na extends Object a mělo by to jet…

Editoval castamir (4. 5. 2012 6:04)

Rogue
Člen | 3
+
0
-

Děkuji Vám za odpovědi pomohlo mi to. :)

vojtech.dobes : Problém byl v přesně v tom že jsem v modelu napsal místo extends BaseModel, extends BasePresenter.

Nyní to funguje již takto

class CategoryPresenter extends BasePresenter{

        public function renderShow($url){
                $model = new PageModel;

                $this->template->data = $model->getAllCategory();
                $this->template->url = $url;
        }
}

Ještě jednou díky a přeji hezký víkend :)
Rogue