2012-02-29 23 views
4

私はsymfonyアプリケーションのパンくずリストメニューを作成しています:{Action}を実行するにはリンクのリストを作成し、次にlayout.phpのコンポーネントを使用して表示しますので、アクションのデータをこれに渡す方法を探しています成分。私はsfContextをレジストリとして使うことができますが、もっと良い方法がありますか?PHP Symfony 1.4 - アクションからコンポーネントにデータを渡す最善の方法は?

+0

はこれを行うには、一般的に、ドキュメントに見られるフラッシュ変数を使用してのように思えます。私はこれがハッカーであることに同意します。これは、1.4の最大の黒い目の1つです。これは、ある行動から別の行動へのフォワーディングの形でよく実行されます。 – yitznewton

答えて

3

通常はそんなにアクションのビューでスロットを使用します。あなたのlayout.phpで

slot('breadcrumb', $links);

そして:基本的に

<?php if(has_slot('breadcrumb')): ?> 
    <?php include_component('modulename', 'breadcrumb', get_slot('breadcrumb')); ?> 
<?php endif; ?> 

slotは(コンテキストで特別な名前空間を使用していますまたは多分その応答...どこかのsfParameterHolderのいくつかのインスタンス、hehe)をスロット名/値のレジストリとして - あなたが考えていた解決策は既に実装されています:-)

あなたのアクションで
+0

答えをありがとう、しかし私の問題はリンクが実際に定義されていなくても、パンくずリストのコンポーネントはとにかく含まれなければならないということです。また、私はレジストリを使用するよりもあまりエレガントではないと思うので、アクションのテンプレートにブレッドクラムのリンクを渡したくないです。 –

+0

もう1つの解決策は、ブレッドクラムの生成(リンクの決定およびリンク)をコンポーネントから別のクラスに移動することです。次に、このクラスを 'context.load_factories'のコンテキストに注入して、現在の' sfWebRequest'で初期化して、あなたのパン粉を整えるのに十分だと思います。そうでない場合は、この同じクラスを 'controller.change_action'イベントにフックして解決されたアクションをそのイベントにプッシュすることもできます。あなたのブレッドクラムがどのようにコンパイルされているかを知らずに言うのは難しいです。次に、このブレッドクラム・クラスをコンポーネントから取り出すだけです。 – prodigitalson

+0

ありがとう、たくさん! –

2

$this->links = array('link1', 'link2', 'linkn'); 

テンプレートで:

<?php include_component('modulename', 'breadcrumb', array('links' => $links); ?> 
関連する問題