Premenna v template neobashuje to na co je nastavena v presenteri

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

Najviac ma na tomto zarazo to, ze to zacalo robit zrazu bez toho aby som nieco menil.

Takze k problemu:
Mam presenter, v nom je funkcia ktora taha data z databaze a dava ich do premennej v template. Vyzera priblizne takto:

public function renderPage($param1){
  $data = $this->model->getData($param1);
  if ($data === false){ $this->redirect("Homepage:default"); }
  else{
    $this->template->data = $data;
  }
}

Template:

<html><head></head><body>
  <h1>{$data->title}</h1>
  <h2>{$data->subtitle}</h2>
</body></html>

Problem je v tom ze v premennej $data v template je nieco uplne ine ako bolo vytiahnute funkciou getData(). Nie je tam junk, su tam validne data, avsak pre uplne iny vstup ako je $param1.
Ak dam print_r($this->template->data) v presenteri, tak je tam to co ma byt, avsak v template je tam zrazu nieco ine.

Cache som mazal, nepomohlo.

Robil to iba jeden view, ten som zmazal a nahral znovu. Teraz to robia 2 ine, ktore su v 2 roznych presenteroch

Editoval Vultour (23. 7. 2014 17:46)

Hurass
Člen | 114
+
0
-

Zkus to poupravit takto:

$data = $this->model->getData($param1)->fetch();
Vultour
Člen | 4
+
0
-

To nepomoze, getData vyzera nejak takto:

public function getData($param){
  $stmt = $this->database->prepare("SELECT * FROM table WHERE param = :param LIMIT 1");
  $stmt->execute(array(":param" => $param));
  $result = $stmt->fetch();
  if ($result === false){ return false; }
  $output = new stdClass();
  $output->rowI = $result["row_i"];
  $output->rowII = $result["row_ii"];
  $output->rowIII = $result["row_iii"];
  return $output;
}
Vultour
Člen | 4
+
0
-

Este jedna vec co som si teraz vsimol, ak zmenim
$this-template->data = $this->model->getData($param1)
na
$this->template->anotherData = $this->model->getData($param1),
a v sablone $data na $anotherData tak vsetko funguje. Ak vsak v sablone dam {print_r($data)}, tak je to stale plne nespravnych dat! Je mozne ze sa to plni niekde inde ako v render/actionPage() a constructore?

Editoval Vultour (23. 7. 2014 18:06)

Pavel Macháň
Člen | 282
+
0
-

Vultour napsal(a):

Este jedna vec co som si teraz vsimol, ak zmenim
$this-template->data = $this->model->getData($param1)
na
$this->template->anotherData = $this->model->getData($param1),
a v sablone $data na $anotherData tak vsetko funguje. Ak vsak v sablone dam {print_r($data)}, tak je to stale plne nespravnych dat! Je mozne ze sa to plni niekde inde ako v render/actionPage() a constructore?

a nepřepíšeš si někde jinde v kódu $this-template->data ?

Vultour
Člen | 4
+
0
-

Pavel Macháň napsal(a):

Vultour napsal(a):

Este jedna vec co som si teraz vsimol, ak zmenim
$this-template->data = $this->model->getData($param1)
na
$this->template->anotherData = $this->model->getData($param1),
a v sablone $data na $anotherData tak vsetko funguje. Ak vsak v sablone dam {print_r($data)}, tak je to stale plne nespravnych dat! Je mozne ze sa to plni niekde inde ako v render/actionPage() a constructore?

a nepřepíšeš si někde jinde v kódu $this-template->data ?

Pozrel som model a vsetky presentery. Nikde o $data a $this->template->data uz neni ani zmienka, v template vsak stale existuje aj ked vymazem cache. wtf

Editoval Vultour (23. 7. 2014 18:24)

Pavel Macháň
Člen | 282
+
0
-

Vultour napsal(a):

Pavel Macháň napsal(a):

a nepřepíšeš si někde jinde v kódu $this-template->data ?

Pozrel som model a vsetky presentery. Nikde o $data a $this->template->data uz neni ani zmienka, v template vsak stale existuje aj ked vymazem cache. wtf

Někde to budeš mít prostě zapomenuté (BasePresenter atd…)

JakubJarabica
Gold Partner | 184
+
0
-

Neprepíšeš naozaj nikde v šablóne(napr. v @layoute) premennú $data? Napr. tým, že ju použiješ ako premennú({foreach $whatever as $data}).

Hurass
Člen | 114
+
0
-

Zkusil bych vymazat cache a potom to zkusit znovu. Případně ještě v presenteru použít dump, ať vidíš, co v tom máš.

dump($this->template->data);