コード例 #1
0
 /**
  * Renders an error template.
  *
  * @throws \Exception
  * @return null
  */
 public function actionRenderError()
 {
     $error = craft()->errorHandler->getError();
     $code = (string) $error['code'];
     if (craft()->request->isSiteRequest()) {
         $prefix = craft()->config->get('errorTemplatePrefix');
         if (craft()->templates->doesTemplateExist($prefix . $code)) {
             $template = $prefix . $code;
         } else {
             if ($code == 503 && craft()->templates->doesTemplateExist($prefix . 'offline')) {
                 $template = $prefix . 'offline';
             } else {
                 if (craft()->templates->doesTemplateExist($prefix . 'error')) {
                     $template = $prefix . 'error';
                 }
             }
         }
     }
     if (!isset($template)) {
         craft()->templates->setTemplateMode(TemplateMode::CP);
         if (craft()->templates->doesTemplateExist($code)) {
             $template = $code;
         } else {
             $template = 'error';
         }
     }
     try {
         $variables = array_merge($error);
         // Escape any inner-word underscores, which Markdown mistakes for italics
         // TODO: This won't be necessary in 3.0 thanks to Parsedown
         $variables['message'] = preg_replace('/(?<=[a-zA-Z])_(?=[a-zA-Z])/', '\\_', $variables['message']);
         // If this is a PHP error and html_errors (http://php.net/manual/en/errorfunc.configuration.php#ini.html-errors)
         // is enabled, then allow the HTML not get encoded
         if (strncmp($variables['type'], 'PHP ', 4) === 0 && AppHelper::getPhpConfigValueAsBool('html_errors')) {
             $variables['message'] = TemplateHelper::getRaw($variables['message']);
         }
         $this->renderTemplate($template, $variables);
     } catch (\Exception $e) {
         if (YII_DEBUG) {
             throw $e;
         } else {
             // Just output the error message
             echo str_replace(array('“', '”', '‘', '’'), array('"', '"', '\'', '\''), $e->getMessage());
         }
     }
 }