Jak přistoupit k proměnné šablony dále v presenteru?
- volpet
- Člen | 6
Zdravím. Pokusím se můj problém vysvětlit co nejstručněji, tudíž to hodně zkrátím.
V metodě renderDefault() deklaruji proměnnou post.
public function renderDefault($param)
{
$this->template->post = $this->nejakymodel->showPost($param);
}
Model mi tedy podle vloženého parametru vrátí nějaký řádek z tabulky
databáze kde jsou údaje o příspevku (v mém případně to bohužel bude
náhodný příspěvek).
Ve stejné šabloně ještě budu mít formulář na komentáře. Když ovšem
budu komentář ukládat, budu potřebovat vědět k jakému id příspěvku ho
přiřadit.
Parametr o ID příspěvku nic neříká, pouze udává na jaké příspěvky
se zaměřit a poté z nich vybrat jeden náhodný.
Zpracování formuláře by tedy zkráceně vypadalo takto:
public function commentFormSubmitted($form) {
$values = $form->getValues();
$this->database->table('comments')->insert(array(
'postId' => $post->id,
'content' => $values->content,
));
}
Právě do $post v ukázce nějak potřebuju strčit $this->template->post který je v renderu.
Upravit to tak, aby parametr byl id příspěvku nemůžu. Uživatel nesmí ovlivnit jaký příspěvek se mu vykreslí.
Pravděpodobně je to banalita, ale opravdu mě nenapadlo jak to efektivně vyřešit. Díky za jakoukoliv radu.
Editoval volpet (7. 12. 2014 17:09)
- Aleš Jandera
- Člen | 24
Ahoj, tohle by mohlo fungovat.
<?php
/** @var Post **/
private $post;
actionDefault($param)
{
$this->post = $this->nejakymodel->showPost($param);
$this->template->post = $this->post;
}
public function commentFormSubmitted($form) {
$values = $form->getValues();
$this->database->table('comments')->insert(array(
'postId' => $this->post->id,
'content' => $values->content,
));
}
?>
- volpet
- Člen | 6
Aleš Jandera napsal(a):
Ahoj, tohle by mohlo fungovat.
<?php /** @var Post **/ private $post; actionDefault($param) { $this->post = $this->nejakymodel->showPost($param); $this->template->post = $this->post; } public function commentFormSubmitted($form) { $values = $form->getValues(); $this->database->table('comments')->insert(array( 'postId' => $this->post->id, 'content' => $values->content, )); } ?>
Díky za odpověd, ovšem z nějakýho neznámýho důvodu dostávám v commentFormSubmitted jinej řádek z databáze než mám v šabloňe. Zítra se na to ještě pořádně podívám.
Editoval volpet (7. 12. 2014 22:38)
- Zax
- Člen | 370
To nemůže fungovat už z principu – zobrazím formulář, načte se náhodný příspěvek, odešlu formulář = nový request, načte se jiný náhodný příspěvek. Asi by se hodilo to rozdělit na dvě akce – jedna, která ti zobrazí příspěvek podle ID v parametru a druhá, která ti vytáhne náhodný a přesměruje tě na akci s ID v parametru, zhruba takhle:
<?php
/** @var Post **/
private $post;
actionDefault($param)
{
$randomPost = $this->nejakymodel->showPost($param);
$this->redirect('postDetail', $randomPost->id);
}
actionPostDetail($id) {
$this->post = $this->nejakymodel->getPostById($id);
$this->template->post = $this->post;
}
public function commentFormSubmitted($form) {
$values = $form->getValues();
$this->database->table('comments')->insert(array(
'postId' => $this->post->id,
'content' => $values->content,
));
}
?>
Editoval Zax (7. 12. 2014 22:50)