/** * Initialize the view object * * $options may contain the following keys: * - neverRender - flag dis/enabling postDispatch() autorender (affects all subsequent calls) * - noController - flag indicating whether or not to look for view scripts in subdirectories named after the controller * - noRender - flag indicating whether or not to autorender postDispatch() * - responseSegment - which named response segment to render a view script to * - scriptAction - what action script to render * - viewBasePathSpec - specification to use for determining view base path * - viewScriptPathSpec - specification to use for determining view script paths * - viewScriptPathNoControllerSpec - specification to use for determining view script paths when noController flag is set * - viewSuffix - what view script filename suffix to use * * @param string $path * @param string $prefix * @param array $options * @throws Zend_Controller_Action_Exception * @return void */ public function initView($path = null, $prefix = null, array $options = array()) { if (null === $this->view) { $this->setView(new Zend_View()); } // Reset some flags every time $options['noController'] = (isset($options['noController'])) ? $options['noController'] : false; $options['noRender'] = (isset($options['noRender'])) ? $options['noRender'] : false; $this->_scriptAction = null; $this->_responseSegment = null; // Set options first; may be used to determine other initializations $this->_setOptions($options); // Get base view path if (empty($path)) { $path = $this->_getBasePath(); if (empty($path)) { /** * @see Zend_Controller_Action_Exception */ require_once 'Zend/Controller/Action/Exception.php'; throw new Zend_Controller_Action_Exception('ViewRenderer initialization failed: retrieved view base path is empty'); } } if (null === $prefix) { $prefix = $this->_generateDefaultPrefix(); } // Determine if this path has already been registered $currentPaths = $this->view->getScriptPaths(); $path = str_replace(array('/', '\\'), '/', $path); $pathExists = false; foreach ($currentPaths as $tmpPath) { $tmpPath = str_replace(array('/', '\\'), '/', $tmpPath); if (strstr($tmpPath, $path)) { $pathExists = true; break; } } if (!$pathExists) { $this->view->addBasePath($path, $prefix); } // Register view with action controller (unless already registered) if ((null !== $this->_actionController) && (null === $this->_actionController->view)) { $this->_actionController->view = $this->view; $this->_actionController->viewSuffix = $this->_viewSuffix; } }