Example #1
0
 /**
  * Reset object states
  *
  * @return void
  */
 public function resetObjects()
 {
     $params = $this->request->getUserParams();
     foreach (array_keys($params) as $key) {
         $this->request->setParam($key, null);
     }
     $this->response->clearBody();
     $this->response->clearHeaders()->clearRawHeaders();
 }
Example #2
0
 /**
  * Handle errors and exceptions
  *
  * If the 'noErrorHandler' front controller flag has been set,
  * returns early.
  *
  * @param  \Zend\Controller\Request\AbstractRequest $request
  * @return void
  */
 protected function _handleError(Request\AbstractRequest $request)
 {
     $frontController = Controller\Front::getInstance();
     if ($frontController->getParam('noErrorHandler')) {
         return;
     }
     $response = $this->getResponse();
     if ($this->_isInsideErrorHandlerLoop) {
         $exceptions = $response->getException();
         if (count($exceptions) > $this->_exceptionCountAtFirstEncounter) {
             // Exception thrown by error handler; tell the front controller to throw it
             $frontController->throwExceptions(true);
             throw array_pop($exceptions);
         }
     }
     // check for an exception AND allow the error handler controller the option to forward
     if ($response->isException() && !$this->_isInsideErrorHandlerLoop) {
         $this->_isInsideErrorHandlerLoop = true;
         // Get exception information
         $error = new \ArrayObject(array(), \ArrayObject::ARRAY_AS_PROPS);
         $exceptions = $response->getException();
         $exception = $exceptions[0];
         $exceptionType = get_class($exception);
         $error->exception = $exception;
         switch ($exceptionType) {
             case 'Zend\\Controller\\Router\\Exception':
                 if (404 == $exception->getCode()) {
                     $error->type = self::EXCEPTION_NO_ROUTE;
                 } else {
                     $error->type = self::EXCEPTION_OTHER;
                 }
                 break;
             case 'Zend\\Controller\\Dispatcher\\Exception':
                 $error->type = self::EXCEPTION_NO_CONTROLLER;
                 break;
             case 'Zend\\Controller\\Action\\Exception':
                 if (404 == $exception->getCode()) {
                     $error->type = self::EXCEPTION_NO_ACTION;
                 } else {
                     $error->type = self::EXCEPTION_OTHER;
                 }
                 break;
             default:
                 $error->type = self::EXCEPTION_OTHER;
                 break;
         }
         // Keep a copy of the original request
         $error->request = clone $request;
         // get a count of the number of exceptions encountered
         $this->_exceptionCountAtFirstEncounter = count($exceptions);
         // Forward to the error handler
         $request->setParam('error_handler', $error)->setModuleName($this->getErrorHandlerModule())->setControllerName($this->getErrorHandlerController())->setActionName($this->getErrorHandlerAction())->setDispatched(false);
     }
 }
Example #3
0
 /**
  * postDispatch() plugin hook -- render layout
  *
  * @param  \Zend\Controller\Request\AbstractRequest $request
  * @return void
  */
 public function postDispatch(\Zend\Controller\Request\AbstractRequest $request)
 {
     $layout = $this->getLayout();
     $helper = $this->getLayoutActionHelper();
     // Return early if forward detected
     if (!$request->isDispatched() || $this->getResponse()->isRedirect() || $layout->getMvcSuccessfulActionOnly() && (!empty($helper) && !$helper->isActionControllerSuccessful())) {
         return;
     }
     // Return early if layout has been disabled
     if (!$layout->isEnabled()) {
         return;
     }
     $response = $this->getResponse();
     $content = $response->getBody(true);
     $contentKey = $layout->getContentKey();
     if (isset($content['default'])) {
         $content[$contentKey] = $content['default'];
     }
     if ('default' != $contentKey) {
         unset($content['default']);
     }
     $layout->assign($content);
     $fullContent = null;
     $obStartLevel = ob_get_level();
     try {
         $fullContent = $layout->render();
         $response->setBody($fullContent);
     } catch (\Exception $e) {
         while (ob_get_level() > $obStartLevel) {
             $fullContent .= ob_get_clean();
         }
         $request->setParam('layoutFullContent', $fullContent);
         $request->setParam('layoutContent', $layout->content);
         $response->setBody(null);
         throw $e;
     }
 }
Example #4
0
 /**
  * Set a userland parameter
  *
  * Uses $key to set a userland parameter. If $key is an alias, the actual
  * key will be retrieved and used to set the parameter.
  *
  * @param mixed $key
  * @param mixed $value
  * @return \Zend\Controller\Request\Http
  */
 public function setParam($key, $value)
 {
     $key = null !== ($alias = $this->getAlias($key)) ? $alias : $key;
     parent::setParam($key, $value);
     return $this;
 }