domenica 13 maggio 2012

Come gestire le chiamate AJAX lato server con lo Zend Framework

Capita spesso di dover scrivere un controller che contiene una o più azioni AJAX che il più delle volte devono restituire una stringa JSON.

Si possono gestire questi casi singolarmente per ogni action, indicando  al controller di non renderizzare alcuno script di view dopo l'esecuzione, oppure si può facilmente fattorizzare questo processo al fine di semplificarci la vita.

Per fare ciò è sufficiente realizzare una classe che estende Zend_Controller_Action che si occuperà di controllare per ogni richiesta il prefisso dell'action. Ovviamente tutte le action che risponderanno ad una chiamata AJAX dovranno avere un prefisso speciale, per esempio ajax.

Ecco un esempio:

<?php

class Library_Controller_Action_Ajax extends Zend_Controller_Action
{

    const AJAX_ACTION_PREFIX = 'ajax';

    protected function _isAjax()
    {
        $actionName = $this->_request->getActionName();
        $ajaxActionPrefix = Awatag_Controller_Action_Ajax::AJAX_ACTION_PREFIX;
        if (strlen($actionName) < strlen($ajaxActionPrefix)) {
        return false;
        }
        $actionPrefix = substr($actionName, 0, strlen($ajaxActionPrefix));
        $isAjax = strcmp($ajaxActionPrefix, $actionPrefix) === 0;
        return $isAjax;
    }

    public function init()
    {
        if ($this->_isAjax()) {
            $this->_helper->viewRenderer()->setNoRender(true);
        }
    }

    public function ajaxFooAction()
    {
        // azione ajax
        // il risultato delle operazioni è nell'array data
        $response = Zend_Json::encode($data);
        echo $response;
    }

    public function barAction()
    {
        // azione normale
    }
}

In questo modo tutte le azioni ajax non renderizzeranno alcuno script di view.

Nessun commento:

Posta un commento