0

カスタム カタログ構造を持つマイクロカーネル Symfony プロジェクトがあります。

私はこれを使用しました: https://github.com/ikoene/symfony-micro

Twig リソース (例外ビュー) などをオーバーライドするにはどうすればよいですか?

Cookbook によると、Resources ディレクトリに TwigBundle というディレクトリを作成する必要があります。

\AppBundle\Resources\TwigBundle\views\Exceptionディレクトリを作りました。ビューのオーバーライドが機能していないようです。

4

2 に答える 2

1

マイクロカーネルのセットアップをご利用いただきありがとうございます。例外ビューをオーバーライドする方法は次のとおりです。

1. カスタム ExceptionController を作成する

まず、ベースの ExceptionController を拡張する独自の ExceptionController を作成します。これにより、テンプレート パスを上書きできます。

    <?php

    namespace AppBundle\Controller\Exception;

    use Symfony\Bundle\TwigBundle\Controller\ExceptionController as BaseExceptionController;
    use Symfony\Component\HttpFoundation\Request;

    class ExceptionController extends BaseExceptionController
    {
        /**
          * @param Request $request
          * @param string $format
          * @param int $code
          * @param bool $showException
          *
          * @return string
          */
         protected function findTemplate(Request $request, $format, $code, $showException)
         {
             $name = $showException ? 'exception' : 'error';
             if ($showException && 'html' == $format) {
                 $name = 'exception_full';
             }

             // For error pages, try to find a template for the specific HTTP status code and format
             if (!$showException) {
                 $template = sprintf('AppBundle:Exception:%s%s.%s.twig', $name, $code, $format);
                 if ($this->templateExists($template)) {
                     return $template;
                 }
             }

             // try to find a template for the given format
             $template = sprintf('@Twig/Exception/%s.%s.twig', $name, $format);
             if ($this->templateExists($template)) {
                 return $template;
             }

             // default to a generic HTML exception
             $request->setRequestFormat('html');

             return sprintf('@Twig/Exception/%s.html.twig', $showException ? 'exception_full' : $name);
         }
    }

2. エラー テンプレートを作成する

さまざまなエラー コードのテンプレートを作成します。

  • error.html.twig
  • error403.html.twig
  • error404.html.twig

この例では、例外テンプレートは次の場所に配置されます。AppBundle/Resources/views/Exception/

3. デフォルトの ExceptionController をオーバーライドする

次に、構成で新しい例外コントローラーを指定しましょう。

twig: exception_controller: app.exception_controller:showAction

于 2016-06-10T17:39:13.000 に答える
0

私はあなたのソリューションが本当に好きですが、カスタム例外コントローラーなしでそれを行う別の方法を見つけました。

オーバーライドされたテンプレートの自動追加チェックは、カーネル クラスを格納するディレクトリの Resources で行われることに気付きました。

したがって、レポの構造は次のとおりです。

/Resources/TwigBundle/views/Exception/

最後に、ディレクトリ構造を少し変更して、内部にカーネル ファイルを含む「app」ディレクトリを作成しました。デフォルトの Symfony プロジェクトと同様です。

于 2016-06-10T20:36:04.017 に答える