Databáze v BasePresenteru, ale i ostatních
- mrfrostikcz
- Člen | 17
Zdravím,
momentálně řeším problém při využítí MySQL databáze jak v basePresenteru, tak ale i ostatních. V basePresenter navážu spojení, abych mohl do @layout.latte vypsal některá data právě přímo z databáze, ale tu potřebuji využít i u ostatních presenterů (např. pagePresenter) kde zas vypisuju jednotlivé stránky. Momentálně to mám napsané viz. níže, ale v jiných presenterech narážím na chybu „Call to a member function table() on a non-object“.
Možná je má představa celá špatně. Budu rád za vaše rady. Díky.
basePresenter
abstract class BasePresenter extends Nette\Application\UI\Presenter
{
private $database;
public function __construct(Nette\Database\Context $database)
{
$this->database = $database;
}
settingsPresenter
class SettingsPresenter extends BasePresenter
{
private $database;
public function renderBasic()
{
/* Load existing settings */
$settings = $this->database->table('settings')->get(1);
if (!$settings) {
$this->error('Nenalezena konfigurace aplikace.');
}
}
}
- Jiří Nápravník
- Člen | 710
Tohle jsou základy PHP, máš tu database v BasePresenteru jako private, musí být aspoň protected, aby jsi ji viděl i v potomcích…
V Presenterech správně nemá databáze co dělat, od toho je model.
- mrfrostikcz
- Člen | 17
Jiří Nápravník napsal(a):
Tohle jsou základy PHP, máš tu database v BasePresenteru jako private, musí být aspoň protected, aby jsi ji viděl i v potomcích…
V Presenterech správně nemá databáze co dělat, od toho je model.
Super, děkuji. A ještě děkuju za tip, na to se určitě podívám aby to bylo řešené lépe.
- Tomáš Kolinger
- Člen | 136
Doporučuju u presenteru místo constructoru využít @inject anotace na obstarání závilostí. Určitě ti to ušetří hodně psaní. Tím rovnou vyřešíš tvůj problém s viditelností.
/**
* @var \Nette\Database\Context
* @inject
*/
public $database;