public function run(Nette\Application\Request $request) { $exception = $request->getParameter('exception'); if ($exception instanceof Nette\Application\BadRequestException) { return new Responses\ForwardResponse($request->setPresenterName('Error4xx')); } $this->logger->log($exception, ILogger::EXCEPTION); return new Responses\CallbackResponse(function () { require __DIR__ . '/templates/Error/500.phtml'; }); }
/** * @return Nette\Application\IResponse */ public function run(Nette\Application\Request $request) { $e = $request->getParameter('exception'); if ($e instanceof Nette\Application\BadRequestException) { // $this->logger->log("HTTP code {$e->getCode()}: {$e->getMessage()} in {$e->getFile()}:{$e->getLine()}", 'access'); return new Nette\Application\Responses\ForwardResponse($request->setPresenterName('Error4xx')); } $this->logger->log($e, ILogger::EXCEPTION); return new Nette\Application\Responses\CallbackResponse(function () { require __DIR__ . '/templates/Error/500.phtml'; }); }
/** * @param \Nette\Application\Request $appRequest * @param \Nette\Http\Url $refUrl * @return string|null */ public function constructUrl(Request $appRequest, Url $refUrl) { $presenter = $appRequest->getPresenterName(); if (!Strings::startsWith($presenter, self::SUBMODULE_NAME . ':')) { return null; } if (Strings::endsWith($presenter, ':' . self::DEFAULT_PRESENTER)) { $presenter = substr($presenter, 0, -strlen(':' . self::DEFAULT_PRESENTER)); } $appRequest->setPresenterName(substr($presenter, strlen(self::SUBMODULE_NAME . ':'))); return parent::constructUrl($appRequest, $refUrl); }
/** * This method is usually implemented by the more complex UI\Presenter * But since an unhandled exception might have occurred, * it should be processed as simply as possible to avoid any further problems or even another exception. * * @param Nette\Application\Request $request * @return Responses\CallbackResponse|Responses\ForwardResponse */ public function run(Nette\Application\Request $request) { $exception = $request->getParameter('exception'); // if it's a simple BadRequestException, use the more powerful presenter if ($exception instanceof Nette\Application\BadRequestException) { return new Responses\ForwardResponse($request->setPresenterName('Error4xx')); } $this->logger->log($exception, ILogger::EXCEPTION); // the 500 means unhandled exception, which should translate to the simplest page possible return new Responses\CallbackResponse(function () { require __DIR__ . '/templates/Error/500.phtml'; }); }
/** * @param \Nette\Application\Request * @param array * @return \Nette\Application\Request */ private function setRequestParams(\Nette\Application\Request $appRequest, array $params) { $metadata = $this->getDefaults(); if (!isset($params[self::PRESENTER_KEY])) { throw new \InvalidStateException('Missing presenter in route definition.'); } if (isset($metadata[self::MODULE_KEY])) { if (!isset($params[self::MODULE_KEY])) { throw new \InvalidStateException('Missing module in route definition.'); } $presenter = $params[self::MODULE_KEY] . ':' . $params[self::PRESENTER_KEY]; unset($params[self::MODULE_KEY], $params[self::PRESENTER_KEY]); } else { $presenter = $params[self::PRESENTER_KEY]; unset($params[self::PRESENTER_KEY]); } $appRequest->setPresenterName($presenter); $appRequest->setParameters($params); return $appRequest; }
/** * Modify request by page * * @param \Nette\Application\Request $request * @param RouteEntity $route * @param $parameters * @param string $domain * @return \Nette\Application\Request */ protected function modifyConstructRequest(Request $request, RouteEntity $route, $parameters, $domain) { $request->setPresenterName(self::DEFAULT_MODULE . ':' . self::DEFAULT_PRESENTER); $request->setParameters(array('module' => self::DEFAULT_MODULE, 'presenter' => self::DEFAULT_PRESENTER, 'action' => self::DEFAULT_ACTION, 'lang' => count($this->languages) > 1 ? isset($parameters['lang']) ? $parameters['lang'] : ($route->page->language ? $route->page->language->alias : $this->defaultLanguage) : NULL, 'slug' => $route->getUrl(), 'domain' => $route->domain ? $route->domain->domain : '') + $parameters); return $request; }