2009-06-02 5 views
10

私は「タブブラウズ」のような機能をしたいインターフェイスを構築しています。これらのタブはそれぞれ既にアクションとして作成されており、タブ付きインターフェースは個々のタブへのリンクとして機能します。私はこのコントローラーの "インデックス"ページを書くことに決めました。すべてのタブの内容を隠しdivに入れてjQueryでスワップしましたが、アクションビューヘルパーを使い始めると、その悪い習慣。 (see this articleZendのアクションビューヘルパー - 回避するには?

これらのアクションのいくつかはフォームを構築します。モデルなどからデータを取得して表示します。私はそれぞれのアクションが自分自身で機能し続けるようにしたい(いくつかの構文解析フォームも同様)。

/itemを参照すると、タブ付きのメニューと、divのすべてのコンテンツが非表示のタグで表示されます。/ item/tab2は特定のアクション(フォーム送信など)です。

もう1つの問題/注意 - ユーザーがその「タブ」にアクセスできない場合、アクセス例外がスローされます。私は、システムにアクセスチェックを2回構築することを好まない(空のコンテンツのタブを表示する)。

私はちょうどこのようなことを処理するのがベストプラクティスであることを理解しようとしています。私はアクションヘルパーがそれかもしれないと思いました。 Viewヘルパーを使用しようとすると、Zend_Formをアセンブルするのが正しいかどうか疑問に思っています。

Zend_View_Helper_Actionを使用しないで回避するための「適切な」方法に関する提案はありますか?

答えて

7

アクションビューヘルパーを回避するための正しい方法を、私はあなたが引用した記事で述べたように、そのパーシャルを作成することですモデルに直接アクセスして、必要なデータを取得します。ビューヘルパー(これを自分で作成します;)を使用すると、ビューに多くのロジックが含まれている場合)。

アクションビューヘルパーは、パフォーマンスの問題だけでなく、恐ろしいデバッグ悪夢を作成します。必要な場合は、アプリケーションがMVCに従っていない可能性があります。そのため、コントローラを再利用、モデルの代わりに、パターンの意図です。

ビューオブジェクトのレンダリングメソッドまたは部分メソッドを使用して、レイアウト内の部分または現在のアクションビューをレンダリングできます。

タブから複数の可能な投稿を処理するアクションが複数ある場合は、これらのアクションをすべて同じビュースクリプトをレンダリングするように設定する必要があります。

1

既存のマークアップからタブ/タブペインを生成せず、オンデマンドでコンテンツを読み込んでいる場合は、タブ自体を表示する前にタブにアクセスする権限があるかどうかを確認するだけです。再度タブのコンテンツを読み込もうとしたときに発生します。

ユーザーがこれらのアクセス許可を持っているかどうかを確認するには、適切な操作モードが必要であり、実行するのに費用がかかるべきではありません。

これらのアクションによって、タブに加えていくつかのスタンドアロンページで動作するコンテンツが生成された場合、アクションビューヘルパーが進行することになります。タブを生成するときにアクションで実行された同じACL(またはその他の)チェックを実行するだけです。

1

私はあなたの正確な問題が何であるか全くわからないんだけど、しかし、あなたはレイアウトを無効にすることができます

$this->_helper->layout->disableLayout(); 

その後、要求されたアクションはちょうどあなたがタブにロードすることができた、それのビュースクリプトを表示します。

あなたが持っている任意の認証コードは通常どおり機能し、アクションの要求されたビュースクリプトを表示できます。アクセスできるかどうかによって異なります。

0

あなたは、try/catchブロックを使用して、任意のアクセス例外をキャッチすることができます:

try { // action throwing exceptions } catch (Exception $e) { // catch silently } 
+0

実際には、アクションビューヘルパーでこれを行うときに、他の多くのものが混乱してしまいます。 JIRAでバグ修正を提出しました – gnarf

関連する問題