/** * 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 View\PhpRenderer()); } // 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(); /* * Commenting until we can refactor inflector if (empty($path)) { throw new Action\Exception('ViewRenderer initialization failed: retrieved view base path is empty'); } */ } if (null === $prefix) { $prefix = $this->_generateDefaultPrefix(); } /** * @todo resolver() is not in Renderer interface... * @todo Should helpers/filters be added here as well? */ $this->view->resolver()->addPath($path . '/scripts'); // 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; } }
/** * Initialize View object * * Initializes {@link $view} if not otherwise a Zend_View_Interface. * * If {@link $view} is not otherwise set, instantiates a new Zend_View * object, using the 'views' subdirectory at the same level as the * controller directory for the current module as the base directory. * It uses this to set the following: * - script path = views/scripts/ * - helper path = views/helpers/ * - filter path = views/filters/ * * @return \Zend\View\Renderer * @throws \Zend\Controller\Exception if base view directory does not exist */ public function initView() { $broker = $this->broker(); if (!$this->getInvokeArg('noViewRenderer') && $broker && $broker->hasPlugin('viewRenderer')) { return $this->view; } if (isset($this->view) && $this->view instanceof View\Renderer) { return $this->view; } $request = $this->getRequest(); $module = $request->getModuleName(); $dirs = $this->getFrontController()->getControllerDirectory(); if (empty($module) || !isset($dirs[$module])) { $module = $this->getFrontController()->getDispatcher()->getDefaultModule(); } $baseDir = dirname($dirs[$module]) . DIRECTORY_SEPARATOR . 'views'; if (!file_exists($baseDir) || !is_dir($baseDir)) { throw new Exception('Missing base view directory ("' . $baseDir . '")'); } $this->view = new View\PhpRenderer(); $this->view->resolver()->addPath($baseDir . '/scripts'); return $this->view; }