/** * Execute controller method * * @throws \Arbor\Exception\ActionNotFoundException * @since 0.1.0 */ protected function callMethod() { $this->resources->registerPresenter($this->getPresenter()); $response = new Response(); $response->setPresenter($this->resources->getPresenter()); $event = new ExecuteActionEvent($this->request); $this->eventManager->fire('executeAction', $event); if (!$event->getResponse()) { $controllerName = $this->request->getClass(); $controller = new $controllerName($this->request, $this->resources); if (!is_callable(array($controller, $this->request->getMethod()))) { throw new ActionNotFoundException($controllerName, $this->request->getMethod()); } $controllerData = call_user_func_array(array($controller, $this->request->getMethod()), $this->request->getArguments()); if ($controllerData instanceof Response) { $response = $controllerData; if (!$response->getPresenter()) { $response->setPresenter($this->resources->getPresenter()); } else { $this->resources->registerPresenter($response->getPresenter()); } } else { $response->setContent($controllerData); } $event = new ExecutedActionEvent($this->request, $response); $this->eventManager->fire('executedAction', $event); } else { $response = $event->getResponse(); } $this->resources->registerResponse($response); $this->prepareView($this->request, $this->resources->getPresenter(), $response); }
/** * Parse view for exception. * * @param \Exception $exception * @since 0.1.0 */ private function parseView($exception) { if (!$this->resources->getEnviorment()->isSilent()) { error_log($exception->getMessage() . " " . $exception->getFile() . "(" . $exception->getLine() . ")"); } $response = new Response(); $response->setStatusCode(500); $response->setContent($exception); $this->resources->registerResponse($response); $presenter = null; try { $presenter = $this->resources->getPresenter(); } catch (ResourcesNotRegisteredException $e) { $presenter = $this->findPresenter(); } try { $request = $this->resources->getRequest(); } catch (ResourcesNotRegisteredException $e) { $requestConfig = new RequestConfig('', '', $this->resources->getEnviorment(), array('route' => '', 'presenter' => array('class' => ''), 'class' => '')); if ($this->resources->getEnviorment()->isSilent()) { $request = new RequestTest($this->resources->getUrl(), $this->resources->getEnviorment()); $request->setConfig($requestConfig); } else { $session = new Session($this->resources->getEnviorment()); $request = new Request($requestConfig, $this->resources->getUrl(), $session); } $this->resources->registerRequest($request); } if ($presenter) { $event = new ExecutePresenterEvent($this->resources->getRequest(), $response); $this->eventManager->fire('executePresenter', $event); $presenter->render($request->getConfig(), $response); } }