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!
Cara, vou testar até funcionar, suar ajax desta forma vai facilitar e muito minha vida!
valeu mesmo cara!
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.
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
Olá Alan, fico feliz em ajudar. Abs.
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?
Alan, como vc está fazendo a requisição Ajax?