Vytažení dat z db a následné předání do šablony i presenterů

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

Zdravím,

řeším takový problém. Potřebuji (v BasePresenteru) vytáhnout data z MySQL a následně předat proměnnou s nimi do šablony a zároveň do presenterů, dědící BasePresenter.

protected function beforeRender()
    {
        $this->template->allowedShopsIds = $this->databaseManager->readFrom('permissions', 'userId = ' . $this->user->getId(), NULL);
    }

Kód výše funguje bez problémů, ale potřebuji tyto data předat i do presenterů. Zkoušel jsem to v BasePresenteru v metodě __construct():

public function __construct() {
        $shopIds = $this->databaseManager->readFrom('permissions', 'userId = ' . $this->user->getId(), NULL);
}

Ježe pak když do beforeRender() hodím:

$this->template->allowedShopsIds = $this->shopIds;

Vyhodí chybu: Call to a member function readFrom() on null

Neví někdo co s tím prosím?

Děkuji moc :)

David Matějka
Moderator | 6445
+
+3
-

v konstruktoru jeste nejsou injectnute zavislosti (pokud je tedy nepredavas pres konstruktor, samozrejme).. nejdrive se zavislostma pracuj v metode startup

edit1: jo a pouzivej parametry ve where, takhle si tam udelas bezpecnostni diru.

edit2: a `$shopIds = ` je akorat lokalni promenna, ne clenska promenna tridy, ale to uz jsou zaklady OOP

sd
Člen | 87
+
0
-

Děkuji moc, funguje :).
to edit1: myslíš where rozdělit na 2 parametry funkce (tj. param1 – sloupec, param2 – kriterium)?

harmim
Člen | 26
+
0
-

Nevím co je ten databaseManager, ale např v dibi by to mělo vypadat nějak takhle

$connection->query('SELECT * FROM [table] WHERE [id] = %i', $id);

Nette database

$database->query('SELECT * FROM [table] WHERE [id] = ?', $id);

záleží na tom jak funguje ten tvůj databaseManager

edit1: musí to být udělané tak, že si připravíš dotaz, místo parametrů dáš nějaké zástupné znaky a potom tam ty parametry setneš

Editoval harmim (28. 1. 2016 21:43)