0

symfony2 ベースの Web サイトを計画しています。デフォルトのレイアウトは、次のブロックで構成されます。

  • プライマリ ヘッダー メニュー
  • 二次サイドメニュー
  • フッターのサイトマップ
  • ログインフォーム
  • 探す
  • 世論調査の質問
  • ショッピングカート

すべての部分について、コントローラーと Twig テンプレートを作成することで、Symfony2 で自分のやり方でコーディングする方法を知っています。一部の部分では、独自のコントローラーを提供するFOSUserBundleなどのバンドルを使用する予定です。

良い答えが見つからないのは、どうすればこれをすべて一緒に踊らせることができるかということです。私の primary-header-menu バンドルまたは FOSUserBundle は、ルートがトリガーされて応答を返す場合にステップアップします。しかし、それは無駄です。どのルートがトリガーされたかに関係なく、このすべてのビルディング ブロックがその部分を (ほぼ) 処理してレンダリングするものが必要です。

これはフォームで特に興味深いものです。フォームが送信された場合は、適切なアクションで処理する必要があります。ただし、その後、ページ全体が返される前に、他のすべてのブロックがコンテンツをレンダリングする必要があります。

Drupalを知っている場合: ブロックにフォームを実装できます。私はこのブロックのみを扱っており、ページ上の他のすべてのものを気にする必要はありません。

Java/SWINGを知っている場合: アクションまたはダイアログを自己完結型のものとして実装できます。フレームワークは、他のすべてを最新の状態に保つことに注意を払います。

4

2 に答える 2

1

私の理解が正しければ、サイトのさまざまな領域からページにさまざまなブロックを表示したいということでよろしいですか?

その場合は、ページに含めたいブロックを layout.html.twig (または base.html.twig、または任意の名前) に設定します。

例 layout.html.twig:

<!DOCTYPE html>
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
        <title>Acme Example Page</title>
    </head>
    <body>
        <div id="sidebar">
            <div id="sidebar-menu-block" class="block">
                {% include 'AcmeBundle:Sidemenu:sideMenu.html.twig' %}
            </div>
            <div id="sidebar-cart-block" class="block">
                {% render url('acme_shopping_cart_block_url') %}
            </div>
            <div id="sidebar-poll-block" class="block">
                {% render url('acme_poll_block_url') %}
            </div>
        </div>

        <div id="content">
            {% block body %}{% endblock %}
        </div>
    </body>
</html>

フラットな小枝のテンプレートを含めたい場合は、'include' を使用します。ロード前に処理が必要なブロックが必要な場合は、「render」を使用してください。

サンプルページ(IE: AcmeUserBundle:Registration:register.html.twig):

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

{% block body %}
<h1>My Page with a form!</h1>
<form>
   {{ form_widget(form) }}
   <input type="submit" value="Save" />
</form>
{% endblock body %}

上記の例は、layout.html.twig で定義されたすべてのブロックで register.html.twig を囲みます。symfony ドキュメントの「他のテンプレートを含む」セクションをチェックしてください: http://symfony.com/doc/2.0/book/templating.html#include-other-templates

于 2013-01-08T14:51:52.053 に答える