/** * Диспетчеризация для 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; }