0

私のページの 1 つで、別のコントローラーから別のページのコンテンツを取得し、その HTML を使用して最初のページに小さな「ウィジェット」を作成しようとしています。

現在のページから取得していた場合は、次のようにすることができます。

my $html = $c->response->body();

しかし、それは別のコントローラーにあるため、取得方法がわかりません。

追加の (潜在的な) 複雑さは、問題のアクションに引数を渡す必要があることです。

私は試しmy $html = $c->visit('/action/')->body();ました - 暗闇の中でのショット - 別の最近の投稿でトラブルシューティングを行いました. しかし、それは現在のアクションを引き継いでいるように見えますが、それから応答を取得することはできません。

私が考えることができる唯一のこと (これはテストされていません) は、ページ 1 の応答を$c->visit保存し、その応答を保存してから、ページ 1 の元の応答を取得し、最後にそれを出力することです。複雑すぎるように見えますが、それが私が考えることができる最高のものです。

何か案は?

4

2 に答える 2

2

これを見る前に、あなたの他の質問に答えました。私の答えの後半は、ここで密接に関係していると思います。

/assets/widget にあるロジックは、コントローラーではなくモデルに配置する必要があるように思えます。これにより、必要な関数で使用できるようになります。

また、テンプレートを (再利用可能な) コンポーネントに分割して、埋め込む予定のコンテンツを 1 回のレンダリング プロセスの一部として実行できるようにする必要があります。

[%- IF foo;
        PROCESS widget.tt;
    END; -%]

または、ウィジェットを別の方法でモデル化して、ウィジェットをメイン ページのレンダリングの一部にする代わりに、AJAX アプローチを使用してウィジェットを生成し、各ウィジェットがアプリケーションに対して独自の呼び出しを行い、JSON を取得して、それ自体をレンダリングします (おそらくjQuery経由- その例は質問の範囲を超えています)。

それが役立つことを願っています。

于 2013-02-19T04:50:24.073 に答える
1

Catalyst::Plugin::SubRequestは、あなたが探していることを行うかもしれません。RET が言うように、アプリを少しリファクタリングする方が賢明かもしれませんが、サブリクエストのレンダリングが役立つ場合があります。

于 2013-02-19T08:37:23.937 に答える