2010-11-22 3 views
2

私はSymfonyを使って簡単なアプリケーションを構築しています。ページレイアウトは、左右のサイドバーを持つ本体で構成されています。サイドバーには、ユーザーが設定できるいくつかのモジュールが含まれています。symfonyのレイアウトでサイドバーコンテンツを埋め込む方法は?

のlayout.php

<div id="left_sidebar"> 
<?php if (has_slot('left_sidebar')): ?> 
<ul> 
    <?php include_slot('left_sidebar') ?> 
</ul> 
<?php else: ?> 
    <!-- default sidebar code --> 
<?php endif; ?> 
</div> 

Iフィルタを使用してみましたスロットを埋めるために:

symfonyはサイドバーを充填するための正しい方法であると思われるスロットを提供します。問題は、サイドバーの一部のモジュールがアクション(カテゴリ更新など)で何が起こるかに依存することです。したがって、アクションが完了した後に生成される必要があります。

msBootstrapFilter

class msBootstrapFilter extends sfFilter 
{ 

    public function execute($filterChain) 
    { 
     // Generating the sidebars at this point is TOO early 
     // as the content of some sidebars depends on the actions 

    // Execute next filter 
    $filterChain->execute(); 

    // Generate the sidebars after running through all the code 
     // This is TOO LATE, the layout has been rendered 

    $this->generateSidebars();   
    } 
} 

それは柔軟性に欠けるようだと私はそれぞれのアクションに「実行のサイドバー」呼び出しを追加する必要はありません。

サイドバーコンテンツを生成するためのSymfonyイベントフローのポイントは何ですか?私が接続できる適切なイベントはありますか?

答えて

3

コンポーネントを使用できますか?基本的にスロットには何らかのアクションが付いています。あなたの行動では、あなたのロジックが必要とするものは何でもでき、上記と同じ方法でレンダリングできますが、より多くのロジックがあります。 manualから

:それははるかに高速だ 以外

コンポーネントは、アクションのようなものです。 コンポーネントのロジックは、 のsfComponentsから継承され、actions/components.class.php ファイルの にあります。そのプレゼンテーションは部分的に に保存されています。 sfComponents クラスのメソッドは、アクションと同様に、実行キーワード から開始し、 アクションが変数を渡すのと同じ方法で、 変数をプレゼンテーション の対応するプレゼンテーションに渡すことができます。

+0

ありがとうございました。私は部品を早期に解雇しましたが、私の目的にはあまり適していません。しかし、あなたのコメントは、私の戦略と追求する新しい道を再考することを余儀なくさせました。 – Tramov

関連する問題