ZF-12410: Zend_Json Json View Helper in json() function passes a boolean as second argument to array_key_exists

Description

When using Zend_Json View Helper with version ZF 1.12.0 get this warning:

array_key_exists() [function.array-key-exists]: The second argument should be either an array or an object in Zend/View/Helper/Json.php on line 67

This was not an issue with my previous version ZF 1.10.8.

Here it is why, I guess: see in Zend/View/Helper/Json.php :

The part where $encodeData is set, it uses a variable $keepLayouts as second argument for array_key_exists(). But such $keepLayouts is not an array nor an object anymore! In fact it was just assigned to a boolean value two lines above!

This bug was not here in version 1.10.8 because the $encodeData stuff has been added in a later version.

A possible solution may be to use the variable $options to test with array_key_exists(), but please check it out!


 
public function json($data, $keepLayouts = false, $encodeData = true)
    {
        $options = array();
        if (is_array($keepLayouts))
        {
            $options     = $keepLayouts;
            $keepLayouts = (array_key_exists('keepLayouts', $keepLayouts))
                            ? $keepLayouts['keepLayouts']
                            : false;
            unset($options['keepLayouts']);
            $encodeData  = (array_key_exists('encodeData', $keepLayouts))
                            ? $keepLayouts['encodeData']
                            : $encodeData;
            unset($options['encodeData']);
        }

        if ($encodeData) {
            $data = Zend_Json::encode($data, null, $options);
        }
        if (!$keepLayouts) {
            // require_once 'Zend/Layout.php';
            $layout = Zend_Layout::getMvcInstance();
            if ($layout instanceof Zend_Layout) {
                $layout->disableLayout();
            }
        }

        $response = Zend_Controller_Front::getInstance()->getResponse();
        $response->setHeader('Content-Type', 'application/json', true);
        return $data;
    }

Comments

No comments to display