Spojení presenteru s modelem
- Rogue
- Člen | 3
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
- Proč tvůj
PageModel
extendujeBasePresenter
? To je nesmysl. - 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 tenCategoryPresenter
? - Nejlepší řešení je zaregistrovat si takový
PageModel
jako službu. Tedy vconfig.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
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
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