Fotky Internet O blogu Programování Z dílny Háefka Ze života

Na ajax jednoduše

26.07.2008 ve 01:25
0 comments
Z dílny Háefka

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í:

  1. volitelná view ajax šablona
  2. 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


Add comment

Projekty

Kamarádi