2

Web サイトのヘッダーにログイン ボタンがあります。このヘッダーの html は、Zend フレームワークの views/layouts/home.phtml にプログラムされています。

このレイアウトには、jQuery シックボックス インライン コンテンツ表示統合によってトリガーされる非表示のフォームがあります。理由は、小さなログインフォームを取得するためだけに ajax 呼び出しを行いたくないからです。

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

ブートストラップがそうするのに適切な場所なのか、それとも他の場所でやるべきなのかわかりません。

したがって、ユーザーがログインしていない場合にどこでも使用できるように、どこでフォームをインスタンス化する必要がありますか。

4

3 に答える 3

2

Zend_Controller_Action を拡張する独自のベース コントローラを作成し、ベース コントローラからコントローラを拡張します。「jQuery シックボックス インライン コンテンツ表示統合」とは何かわかりませんが、コードを実行する必要がある場合に応じて、いくつかのセクションに入れることができます。init()、preDispatch()、postDispatch() など...ベースコントローラーから拡張するときは、次のようにすることを確認してください。

親::init() 親::preDispatch() 親::postDispatch() など...各セクション内で基本コードも実行されるように...

于 2009-07-04T04:01:58.540 に答える
2

Pradeep Sharma の解決策に注意してください (彼が自分で書いて以下に受け入れた回答)。

以下のすべてのコード コードは ZF 1.12 用であり、ZF 2.0 用ではありません

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

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

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

application/plugins/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() ;
    }
}

new を呼び出すApplication_Form_HeaderForm()と、デフォルトでapplication/forms/フォルダーに自動ロードされます。などを使用してプラグインに直接フォームを作成することもできますが、new Zend_Form()addElement()利用はできません。

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

application/Bootstrap.php :

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

new を呼び出すApplication_Plugin_HeaderForm()と、デフォルトでapplication/plugins/フォルダーに自動ロードされます

于 2012-09-23T23:20:20.707 に答える
1

Zend_Controller_Plugin_Abstractプラグインを実装してフロントコントローラーに登録するように拡張して、別の方法でそれを行いました。

public function routeStartup(Zend_Controller_Request_Abstract $request) { } 

上記のメソッド内でフォームを生成し、フォームを $view オブジェクトに設定します。

$view は次を使用して取得できます。

$view = Zend_Layout :: getMvcInstance()->getView();
于 2009-07-07T11:09:52.063 に答える