Search code examples
phpjsonzend-frameworkhelpercontext-switch

Creating a custom JSON response object with Zend Action Helper ContextSwitch


I normally append an encoded json object to the response body, however I now have a situation that warrants using the ContextSwitch action helper.

I have a Zend_Form that requires three different response contexts:

  1. html - Render the form as normal html within a layout.
  2. html-partial - An ajax "get" request that renders just the form as html.
  3. json - An ajax "post" request that returns any form valiation error messages.

For each context I have 3 view scripts. Although the two html contexts could use the same view script, but I haven't figured out if this is possible.

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

The html context views work okay, but the json view is not being picked up. What is the best method to override the default json post callback behaviour or pass a custom encoded object to the response body?


Solution

  • Personally, I don't use "View" to generate JSON content. In my init(), I have something like this:

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

    And In my indexAction():

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

    Hope this help.