/** * Retrieves the view renderer object * * @return Zend_Controller_Action_Helper_ViewRenderer|null * @throws Glitch_Application_Resource_Exception */ public function getViewRenderer() { if (null === $this->_viewRenderer) { // Pull in the front controller; bootstrap first if necessary $this->_bootstrap->bootstrap('FrontController'); $front = $this->_bootstrap->getResource('FrontController'); // Ignore if no view renderer is to be used if ($front->getParam('noViewRenderer')) { return null; } // Get existing renderer, if any, or create a new one $this->_viewRenderer = Zend_Controller_Action_HelperBroker::hasHelper('viewRenderer') ? Zend_Controller_Action_HelperBroker::getStaticHelper('viewRenderer') : new $this->_className(null, $this->getOptions()); // Dynamic class loading; perform sanity check if (!$this->_viewRenderer instanceof Zend_Controller_Action_Helper_ViewRenderer) { throw new Glitch_Application_Resource_Exception('Class is not a valid view renderer instance'); } // Register the view as the default view for handling view scripts $this->_bootstrap->bootstrap('View'); $view = $this->_bootstrap->getResource('View'); $this->_viewRenderer->setView($view); // It is paramount to set this base path spec: ZF otherwise uses its own // spec, causing it to create a path to a conventional ZF-style directory $this->_viewRenderer->setViewBasePathSpec(':module/' . Glitch_View::PATH_VIEW); // Set empty inflector settings: all path translations are handled by the custom dispatcher $inflector = new Zend_Filter_Inflector(); $inflector->addRules(array(':module' => array(), ':controller' => array(), ':action' => array())); $this->_viewRenderer->setInflector($inflector, true); if (!Zend_Controller_Action_HelperBroker::hasHelper('viewRenderer')) { Zend_Controller_Action_HelperBroker::addHelper($this->_viewRenderer); } } return $this->_viewRenderer; }
public function testCustomInflectorUsesViewRendererTargetWhenPassedInWithReferenceFlag() { $this->request->setModuleName('bar') ->setControllerName('index') ->setActionName('test'); $controller = new \Bar\IndexController($this->request, $this->response, array()); $controller->setHelperBroker($this->broker); $this->helper->view->resolver()->addPath($this->basePath . '/_files/modules/bar/views'); $inflector = new Filter\Inflector('test.phtml'); $inflector->addRules(array( ':module' => array('Word\CamelCaseToDash', 'stringToLower'), ':controller' => array('Word\CamelCaseToDash', new \Zend\Filter\Word\UnderscoreToSeparator(DIRECTORY_SEPARATOR), 'StringToLower'), ':action' => array( 'Word\CamelCaseToDash', new Filter\PregReplace('/[^a-z0-9]+/i', '-'), 'StringToLower' ), )); $this->helper->setInflector($inflector, true); $this->helper->render(); $body = $this->response->getBody(); $this->assertContains('Rendered index/test.phtml in bar module', $body); }