Načítanie menu z databázy
Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
- Jan Tvrdík
- Nette guru | 2595
Můžeš poslat ukázku toho kódu, o kterém se domníváš, že by měl fungovat, ale nefunguje?
- Jan Tvrdík
- Nette guru | 2595
Pořád nechápu tvůj problém, pokud ti v normálním presenteru funguje
public function renderFoo()
{
$this->template->menu = $this->database->loadMenu(...);
}
Tak v BasePresenteru bude fungovat
protected function beforeRender()
{
parent::beforeRender();
$this->template->menu = $this->database->loadMenu(...);
}
- StanlieK
- Člen | 28
Tak toto mám v BasePresenter(i)…
abstract class BasePresenter extends Nette\Application\UI\Presenter
{
/** @var Nette\Database\Context */
private $database;
public function __construct(Nette\Database\Context $database)
{
$this->database = $database;
}
protected function beforeRender()
{
parent::beforeRender();
$this->template->categories = $this->database->table('categories');
}
}
A ladenka vyhadzuje túto chybu: Call to a member function table() on a non-object
- MartinitCZ
- Člen | 580
Zkus použít toto:
abstract class BasePresenter extends Nette\Application\UI\Presenter
{
/**
* @var Nette\Database\Context
* @inject
*/
public $database;
protected function beforeRender()
{
parent::beforeRender();
$this->template->categories = $this->database->table('categories');
}
}
Případně toto:
abstract class BasePresenter extends Nette\Application\UI\Presenter
{
/**
* @var Nette\Database\Context
*/
private $database;
/**
* @param Nette\Database\Context
*/
public function injectDatabase(Nette\Database\Context $context)
{
$this->database = $context;
}
protected function beforeRender()
{
parent::beforeRender();
$this->template->categories = $this->database->table('categories');
}
}
Vyhneš se tím tomu, co popisuje Honza.
Editoval martinit (5. 1. 2014 11:51)