2017-07-07 13 views
1

私はezplatformを使用しており、ビューごとに別々のコントローラを作成せずに共通のCMSコンテンツをすべてのページに自動的に共有する方法を見つけようとしています。共有symfonyベースコントローラからのすべてのビューの共通コンテンツ

root_folder: 
    controller: "AppBundle:Homepage:homepage" 
    match: 
     Id\Location: 58 

article_container: 
    controller: "AppBundle:ArticleContainer:articleContainerChildren" 
    match: 
     Identifier\ContentType: "article_container" 

article_one_column: 
    template: "full/article_one_column.html.twig" 
    match: 
     Identifier\ContentType: "article_one_column" 

これらは、最後の例外を除いて、そこに独自のカスタムコントローラに3つの簡単な試合です:

これはYMLファイルから簡単な抽出物です。

最初の2つの試合は、ベースコントローラを拡張するコントローラに当たった。

return $this->render(
    'full/article_container.html.twig', 
    [ 
     'location'   => $location, 
     'content'   => $currentContent, 
     'articles'   => $articles, 
     'articleLocations' => $locations, 
    ] 
); 

ザ・関数は次のようになり、レンダリング言った:ベースコントローラ内 は、我々は標準はこのように呼ばれる関数をレンダリングする必要がありますが、我々は単純にして、元のparamsをマージ見ることができるように

$parameters = array_merge($parameters, [ 
    'main_navi'   => $navigation, 
    'mega_navi_data' => $navigation, 
    'quotes'   => $contentRenderer->getQuotesData(), 
    'featured_articles' => $contentRenderer->getFeaturedArticles(), 
    'contact_form'  => $this->getContactForm(), 
]); 

return parent::render($view, $parameters, $response); 

すべてのページに必要な共通データこのデータは「maga navi」とフッターのコンテンツに使用されます。

問題は、我々はarticle_one_columnページをロードしようとすると、このよう はそれがゆえ、共通のデータをロードしないカスタムコントローラ 小枝エラーになり、ヘッダーとフッターに必要なを使用していないことになりました。

質問: データ型ごとにカスタムコントローラを作成せずに共通のコンテンツをすべてのルートに配信するにはどうすればよいですか?

答えて

2

コンテンツタイプごとにコントローラを作成する必要はありません。場合によっては、ビューにデータを注入することができます。 ChildrenProviderをコンセプトに:カスタムコントローラを使用して

はあなたがまた私たちは(https://github.com/Novactive/NovaeZExtraBundleここでは他の中で)このコンセプトを同梱しているhttps://doc.ez.no/display/DEVELOPER/Injecting+parameters+in+content+views

を使用することができます注入したい一般的なもののため、選択肢の一つです。

また、ヘッダーとフッターに関連する情報をビューに挿入して、レイアウトでそれらを取得したいと述べたとお伝えしました。それは奇妙に聞こえる。 eZではsymfonyだけでも、ビューからコントローラをレンダリングすることができます。ヘッダーをレンダリングし、フッタをビューから独立してレンダリングすることができます。

子供にとっては、私はカスタムコントローラの代わりにリスナーを使いたいと思っています。 これはNovactiveバンドルで管理されますが、自分で実行する場合は注意が必要です。pre_content_viewリスナーは、各ビュー(行、フルなど)でトリガーされます。通常は、ビューをフルに表示する必要があります。

+1

これを知っている人には注意してください。カスタムコントローラーを使用しようとしている場合に、このプリレンダーイベントを使用したい場合(素晴らしい)です。カスタムコントローラー(単にstdレンダーを呼び出す場合)はこのイベントを自動的にトリガーしないので、手動で呼び出す必要があることに注意してください。 ezの中心からのStdビューレンダリングはイベントをトリガーします...コントローラから単純なレンダリングを行うときにすべてのstdイベントをトリガーするための簡単なメソッドがあれば、すばらしいでしょう... – John