2009-06-26 9 views
2

私はウェブサイトのヘッダーにログインボタンを持っています。このヘッダーのhtmlは、Zend framework views/layouts/home.phtmlにプログラムされています。すべてのコントローラ用のZendフレームワーク共通コード

このレイアウトでは、jQueryのthickboxインラインコンテンツディスプレイの統合によってトリガーされる隠れたフォームがあります。理由、私はちょうど小さなログインフォームを取得するために、ajax呼び出しをしたくないです。

私はZend_Formを使用してフォームを作成します。問題は、ユーザーがログインしているかどうかを確認した後、すべてのコントローラでそれを行う必要があることです。私はこのフォーム生成を1つの場所、例えばブートストラップに置いて、ユーザーがログインしていなければフォームを生成しないと言うブートストラップのロジックを持っていきたいと思います。

ブートストラップが適切な場所であるかどうか、私は他の場所でそれを行うべきかどうかわかりません。

どこでもその利用できるように、ユーザーがログインしていない場合、私は、フォームのインスタンスを作成する必要がありますので

、。

答えて

1

Zend_Controller_Plugin_Abstractを拡張してフロントコントローラーに登録する方法を変更しました。

は、上記の方法でフォームを生成し、$ viewオブジェクトにフォームを設定します。

$ビューを使用してretrivedすることができます。

$view = Zend_Layout :: getMvcInstance()->getView(); 
2

Zend_Controller_Actionのは、あなたのコントローラがあなたのベースコントローラのはみ出している拡張し、独自のベースコントローラを作成します。私は "jQuery thickboxインラインコンテンツ表示統合"が何であるか分かりませんが、コードを実行する必要があるときには、いくつかのセクションを用意しています。

親::のinit() 親::をpreDispatch() 親:あなたが好きsthingんあなたのベースコントローラをオフに拡張するときは、init()、をpreDispatch()、postDispatch()など...念:: postDispatch() など...各セクション内でベースコードも同様に実行されます。

2

はプラディープ・シャーマのソリューション(彼は自分自身を書いて、下記の受け入れ答え)に注意してください。

以下のすべてのコードのコードは、ZF 1.12のためであり、ブートストラップではないZF 2.0

、Zend_LayoutののMVCインスタンスがまだ作成されていない可能性があります。あなたは代わりにZend_Layout::startMvc()を使用する必要があります。

$view = Zend_Layout::startMvc()->getView() ; 

そして、TBH、私はをpreDispatch()関数でこのコードを実行することを好みます。 ZFの新規ユーザーは、このに興味があるかもしれない:

アプリケーション/プラグイン/ HeaderForm.php:

class Application_Plugin_HeaderForm extends Zend_Controller_Plugin_Abstract 
{ 
    public function preDispatch(Zend_Controller_Request_Abstract $request) 
    {  
     $view = Zend_Layout::startMvc()->getView() ; 
     $view->headerForm = new Application_Form_HeaderForm() ; 
    } 
} 

アプリケーション/フォーム/フォルダにデフォルトで新しいApplication_Form_HeaderForm()意志の自動ロードを呼び出します。 new Zend_Form()addElement()などで直接プラグインにフォームを作成することもできますが、再利用はできません。

もちろん、このプラグインをブートストラップに登録する必要があります。

アプリケーション/ bootstrap.phpの:

class Bootstrap extends Zend_Application_Bootstrap_Bootstrap 
{ 
    protected function _initPlugin() 
    { 
     $front = Zend_Controller_Front::getInstance() ; 
     $front->registerPlugin(new Application_Plugin_HeaderForm()) ; 
    } 
} 

アプリケーション/プラグイン/フォルダにデフォルトで新しいApplication_Plugin_HeaderForm()意志の自動ロードを呼び出す

関連する問題