Пример #1
0
 /**
  * Диспетчеризация для Controller Action блока
  *
  * @param Block $block
  * @return Response|bool
  */
 public function dispatchControllerAction($block)
 {
     try {
         $controllerParam = $block->getController();
         $actionParam = $block->getAction();
         $request = $this->getServiceManager()->get('request');
         $controllerClass = 'Application\\Controller\\Block\\' . implode('', array_map('ucfirst', explode('-', $controllerParam))) . 'Controller';
         $actionMethod = implode('', array_map('ucfirst', explode('-', $actionParam))) . 'Action';
         $actionMethod = strtolower(substr($actionMethod, 0, 1)) . substr($actionMethod, 1);
         $response = $this->getResponse();
         /** @var $controller AbstractAction */
         $controller = new $controllerClass($request, $response, $block);
         $classMethods = get_class_methods($controller);
         if (in_array('preDispatch', $classMethods)) {
             $controller->preDispatch();
         }
         $forward = $controller->getForward();
         if (!$controller->getBreakRun() && empty($forward)) {
             $actionResponse = $controller->{$actionMethod}();
             if (in_array('postDispatch', $classMethods)) {
                 $controller->postDispatch();
             }
         }
         /*
                     if (!empty($forward)) {
                         $request->setParams($forward);
                         $controller->removeForward();
                         return $this->dispatch($request, $response);
                     }*/
         return $response;
     } catch (Exception $e) {
         $response = $this->getResponse();
         $response->setException($e);
     }
     return false;
 }