2011-03-08 11 views
9

Normalmente anexo un objeto json codificado al cuerpo de la respuesta, sin embargo, ahora tengo una situación que justifica el uso del asistente de acción ContextSwitch.Creando un objeto de respuesta JSON personalizado con Zend Action Helper ContextSwitch

Tengo un Zend_Form que requiere tres contextos diferentes: respuesta

  1. html - hacer la forma como html normal de dentro de un diseño.
  2. html-partial - Una solicitud de "obtener" ajax que represente solo como html.
  3. json - Una solicitud de "publicación" ajax que devuelve mensajes de error de validación de formularios.

Para cada contexto tengo 3 scripts de vista. Aunque los dos contextos html podrían usar el mismo script de vista, pero no he averiguado si esto es posible.

  • form.phtml
  • form.html.phtml
  • form.json.phtml

Los puntos de vista de contexto html funcionan bien, pero no está siendo recogido la opinión de JSON arriba. ¿Cuál es el mejor método para anular el comportamiento de devolución de llamada json predeterminado o pasar un objeto codificado personalizado al cuerpo de la respuesta?

+0

he descubierto que la fijación de setAutoJsonSerialization (falso) en el contextSwitch permite a un script de vista que pasarán a ser, sin dejar de mantener el contexto Content-Type encabezamiento. – gawpertron

Respuesta

6

Personalmente, no uso "Ver" para generar contenido JSON. En mi init(), que tienen algo como esto:

$ajaxContext = $this->_helper->getHelper('AjaxContext'); 
$ajaxContext->setAutoJsonSerialization(false) 
    ->addActionContext('index', array('html', 'json')) 
    ->initContext(); 

y en mi indexAction():

if (true === $this->isAjaxJson()) { 
    $this->_helper->json(
     array(
      'response' => $myResponse, 
      'message' => $myMesage 
     ) 
    ); 
    return; 
} 

Esperanza esta ayuda.

+0

Sí, eso es más o menos cómo lo hice. Sin embargo, utilicé un script de vista separado para manejar la respuesta. – gawpertron

0

esto puede ayudar: $this->_helper->json->sendJson($data); tiempo,

$data=array('data1'=>'val1','data2'=>'val2');

Cuestiones relacionadas