Utilizando AjaxContext para chamadas Ajax com Zend Framework

Olá pessoal!

Esta semana estou trabalhando num projeto onde a utilização de Ajax está sendo muito útil em termos de performance e facilidade na busca de produtos no banco de dados.

Como estou utilizando Zend Framework no projeto, vou explicar resumidamente como trabalhar com requisições Ajax no ZF.

Basicamente, o óbvio seria desabilitar a renderização da view por padrão em sua action e também desabilitar o layout, caso esteja usando-o.

// outros códigos do controller

public function testeAction()  
{  
    $this->_helper->viewRenderer->setNoRender();  
    $this->_helper->layout->disableLayout();  
    //..  
}

Como já é de se esperar, o ZF possui um Action Helper que facilita muito a vida. Do jeito acima, eu teria que renderizar uma view na mão para retornar alguma coisa pra solicitação Ajax. O jeito do Zend te permite escolher o que irá retornar (html ou json), padronizar o nome do arquivo da *view *que será chamado, e desabilitar o layout pra você.

Vamos colocar no nosso método preDispatch a chamada para nosso helper ajaxContext:

public function preDispatch()  
{  
    $ajaxContext = $this->_helper->getHelper('AjaxContext');  
    $ajaxContext->addActionContext('teste', 'html')  
        ->addActionContext('outra-action', 'html')  
        ->initContext();  
}

Desta forma, eu já estou dizendo pro meu controller que os métodos ajax e outra-action são acessados por requisições Ajax e retornaram código HTML.

Pra facilitar ainda mais nossa vida o Zend já vai chamar automaticamente a view teste.ajax.phtml na pasta de views do controller. Isso facilita ainda mais a padronização de arquivos.

Caso não queira retornar HTML, posso retornar JSON bastando alterar a chamada no preDispatch:

public function preDispatch()  
{  
    $ajaxContext = $this->_helper->getHelper('AjaxContext');  
    $ajaxContext->addActionContext('teste', 'json')  
        ->addActionContext('outra-action', 'html')  
        ->initContext();  
}

Desta forma minha action teste irá me retornar JSON. Posso utilizar associações de variáveis nas views normalmente que o Zend transformará o código em JSON:

public function testeAction()  
{  
    // demais códigos

    $this->view->valor1 = $valor1;  
    $this->view->valor2 = $valor2;

    // o Zend transformará todas as variáveis da view em JSON  
}

Em alguns casos, será necessário acrescentar ?format=html ou ?format=json à sua URL na chamada do Ajax (jQuery, etc), avisando o Zend o que ele precisa.

Para maiores informações sobre o AjaxContext acesse a documentação oficial do Zend Framework.

É isso aí! Ajax com Zend Framework é bem tranquilo de entender e bastante eficiente!

Published by

Junior Grossi

senior software engineer & stutterer conference speaker. happy husband & dad. maintains Corcel PHP, elePHPant.me and PHPMG. Engineering Manager @ Paddle

6 thoughts on “Utilizando AjaxContext para chamadas Ajax com Zend Framework”

    1. Fala Vinícius!

      Que bom que gostou do post. Espero que seja realmente muito útil pra você. Lembrando que este post foi para a versão 1 do ZF.

      Abraço.

  1. Opa Junior valeu cara,
    Consegui resolver no dia seguinte

    O problema era que eu estava usando um formato em addActionContext e outro no parametro format da url

  2. Cara,não estou conseguindo fazer isso funcionar de jeito nenhum.
    É como se os metodos do $ajaxContext não estivessem sendo chamados (mas estão)
    pois ele ainda renderiza o layout e não procura a view com o sufixo *.ajax.phtml
    sabes o que pode estar acontecendo?

Leave a Reply

Your email address will not be published. Required fields are marked *