Na ajax jednoduše
Pojďme rovnou k věci, „nejjednodušeji“ můžeme Ajax-response vygenerovat „ručně“ :
public function saveCommentAction($postId)
{
$form = $this->commentForm;
if ($form->isSubmit() && $form->isValid()) {
// saving comment
if ($this->ajax) {
echo $comment;
exit;
} else {
$this->redirect('post');
}
} else {
if ($this->ajax) {
echo 'Neodeslali jste formulář!';
exit;
} else {
$this->redirect('back');
}
}
}
Tento přístup je snad jasný. Pokuď je stránka volána ajaxem, vypíšeme
potřebné sdělení a zavoláme exit(), aby se již nic
nerenderovalo (layout je v tuto chvíli již vypnutý, ale renderovala by se
běžná šablona).
Háefko nám ale nabízí další volitelná vylepšení:
- volitelná view ajax šablona
- volitelná ajax metoda
Můžete použít libovolnou z těchto možností, aniž byste použili tu druhou! Využijeme vlastní ajax view šablonu, abychom vylepšili první ukázku:
Pokud nechcete volat exit, a chcete svůj výstup ještě šablonově
zpracovat, je pro vás vlastní ajaxová šablona téměř nutností. Jediné,
co musíte udělat pro její vytvoření je upravit její jméno:
viewname.ajax.phtml. V našem příkladu tedy vytvořte soubor
save-comment.ajax.phtml. V něm pak pracujte jako v klasické
view šabloně.
public function saveCommentAction($postId)
{
$form = $this->commentForm;
if ($form->isSubmit() && $form->isValid()) {
// saving comment
if ($this->ajax) {
$this->view->comment = $comment;
} else {
$this->redirect('post');
}
} else {
if ($this->ajax) {
$this->view->comment = 'Neodeslali jste formulář!';
} else {
$this->redirect('back');
}
}
}
Další možností je oddělit i samotnou action. To uděláte opět velmi
jednoduše, vytvoříte další metodu, kde ke suffixu Action
přidáte ještě Ajax. V našem ukázkovém příkladu
vytvoříte něco jako:
public function saveCommentAction($postId)
{
$form = $this->commentForm;
if ($form->isSubmit() && $form->isValid()) {
// saving comment
$this->redirect('post');
} else {
$this->redirect('back');
}
}
public function saveCommentAjaxAction($postId)
{
$form = $this->commentForm;
if ($form->isSubmit() && $form->isValid()) {
// saving comment
$this->view->comment = $comment;
} else {
$this->view->comment = 'Neodeslali jste formulář!';
}
}
Velmi vhodnou výhodou je fakt, že nemusíte vůbec implementovat běžnou
action. V případě, kdy bude implementována pouze AjaxAction se
samozřejmě žádného výstupu nedočkáte a dostanete chybovou stránku
404. Můžete si vyzkoušet na tomto blogu adresu pro náhled komentářů: http://hrach.netuje.cz/…view-comment.
Ať už na ni zašlete jakýkoli post požadavek, stále pro vás nebude
existovat, dokud na ni nepřistoupíte pomocí ajaxu.
0 comments
No comments