2017-04-27 1 views
0

Symfonyには複数のWebアプリケーションが作成されています。これを簡単にするために、テンプレートのバンドルを作成しました。Symfonyでエラーテンプレートを使用してコンポーザーバンドルを作成するにはどうすればよいですか?

<?php 
namespace company\TemplateBundle; 
use Symfony\Component\HttpKernel\Bundle\Bundle; 

class TemplateBundle extends Bundle 
{ 
} 

そしてリソース/ビュー/ template.html.twigにタイトル、コンテンツのようなもののためのコードブロックを使用して、メインの小枝テンプレートである:(コメントは取り除かで)ので、メインファイル(TemplateBundle.php)が含まれています

{# app/Resources/views/base.html.twig #} 

{% extends 'TemplateBundle::template.html.twig' %} 

{% block title %}App Name{% endblock %} 

{% block content %} 
    <div class="container page-content">{% block body %}{% endblock %}</div> 
{% endblock %} 

{% block stylesheets %} 
    <link rel="stylesheet" href="{{ asset('css/appspecific.css') }}"> 
{% endblock %} 

とデプロイメントの作曲インストールを実行したときに、このバンドル:などのアプリで

、base.html.twigで私はすべての(他のすべての小枝ファイルが延びていること)であるエリアテンプレートが更新されると、すべてのアプリケーションが新しいバージョンに更新され、get再展開されました。ここまでは順調ですね。

私が問題に遭遇したのは、エラーページをバンドルに追加したいときです。だから、アプリで、現時点では、彼らは、例えばerror404.html.twigため/app/Resources/TwigBundle/views/Exception/errorxxx.html.twig にあります

{% extends 'base.html.twig' %} 

{% block body %} 
    <h1>That Page Could Not Be Found</h1> 
    <p>It seems that you are trying to access a page that doesn't exist. Please check your spelling and try again.</p> 
{% endblock %} 

エラーページがベースを拡張し、この方法タイトルなどを設定して、テンプレートをメインサイトテンプレートで拡張します。したがって、エラーページを各プロジェクトに追加する必要はなく、エラーページの内容が変更されたときに各プロジェクトを更新する必要があるため、それらをバンドルに追加します。

デフォルトのtwigエラーページを乗り越えるには、これを行う簡単な方法はありますか(テンプレートバンドルか、別のものを作成することはできますか)?

簡単な方法がない場合は、他にどのようなオプションがありますか?

+1

TwigBundle - http://symfony.com/doc/current/templating/overriding.html&http://symfony.com/のようなコアバンドルを含む、バンドルの一部をオーバーライドする方法に関するルールが定義されています。 doc/current/bundle/inheritance.html#overriding-resources-templates-routing-etc –

+0

これらのメソッドは動作しません。最初のものは、あなたのアプリのバンドルからテンプレートを上書きする方法を説明しています(上で説明したように)。もう1つのバンドルでは役に立ちません。私が前に試した2つ目のオプションは、バンドル内の他の実験からの迷子コードを残しておく必要があります。それをきれいにして再試行して今すぐ動作させてください、すぐに詳細で回答を投稿します。 – MicWit

答えて

0

だから、答えは私のバンドルでバンドルをオーバーライドすることです。私はこのすべてを行うには、私は、必要なコントローラなどのテンプレートを置き換えることができますので、私はちょうど資源に(例えばerror404.html.twig用)私のエラーテンプレートを入れ、その後

<?php 
namespace company\TemplateBundle; 
use Symfony\Component\HttpKernel\Bundle\Bundle; 

class TemplateBundle extends Bundle 
{ 
    public function getParent() 
    { 
     return 'TwigBundle'; 
    } 
} 

にTemplateBundle.phpを修正しました/ views/Exceptionディレクトリ(/ vendor/symfony/symfony/src/Symfony/Bundle/TwigBundleのTwigBundleバンドルにある場所と同じです)、base.html.twigを拡張しているので、残りの部分のようになりますアプリケーション。

関連する問題