2011-12-30 8 views
0

をブートストラップ前の私はZend Frameworkのアプリケーションがブートストラップされ、実行される前に一度PHPスクリプトを実行する必要があります。これは私の/public/index.phpでこの初期スクリプトを呼び出すことで今動作しますが、スクリプトはすべての後続のzendフレームワークページ要求に対しても実行されます。このスクリプトは最初のリクエストで1回だけ実行され、追加のページがajax経由でロードされるときには再実行されません。ロードPHPスクリプト

私の最初の試みは、そのような/public/index.phpファイル内のいくつかのPHPの定数を設定することであった

:require_onceを「パス/に/スクリプト/実行/に(! 'SOME_VAR')(定義された)場合

/once.php '; define( 'SOME_VAR'、 '1);

しかし、他のページは、私が「SOME_VAR」を定義したにも関わらず、AJAXを介してロードされたとき、それが持続しないと定義され、スクリプトが再び実行されるように滞在します。私はZend Frameworkの1.11を使用してい

、アパッチ(XAMPP)。 Zendのは、ブートストラップおよび(Zend Frameworkの内側)に実行された後にこのスクリプトを実行する

オプションではありません。 Zend Framework Documentationによると

+0

誰かが文脈について教えてください。 – Layke

答えて

1

定数は動作しません。

現在のリクエストが通常リクエストかXmlHttpRequest(AJAX)リクエストかどうかを確認したいと思うようです。

あなたのindex.phpの先頭にこのような何かを試みることができる:

<?php 
define('IS_AJAX_REQUEST', isset($_SERVER['HTTP_X_REQUESTED_WITH']) 
    && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest'); 

if (! IS_AJAX_REQUEST){ 
    // run your code. 
} 

あなたがセッションを使用している場合は、特別なコードが実行されています一度、あなたもちょうどセッションにフラグを設定することができます、それをテストしてください。

+0

定数の説明ありがとうございます。要求がAjaxでなく、問題がまだ存在していたらどうなりますか?外部スクリプトを起動したり、フロントエンドのHTMLを一度しか設定したり、zendがやることをやり続けたりするためには、「Zendのような」方法が必要です。 – whitespy9

+0

@whitespy:外部スクリプトのポイントが出力に一部のHTMLをレンダリングする場合、それは本当に、ブートストラップ前に発生する必要があるように、それは鳴りません。その場合、レイアウトビュースクリプト(フロントコントローラプラグイン、アクションヘルパー、またはレイアウトビュースクリプト自体のいずれか)を変更するだけで十分です。あるいは、外部処理がブートストラップの前に行われる必要がある他の理由はありますか? –

+0

@DavidWeinraub:そこスクリプトでは、他のもの(認証、レンダリングのリンクなど)の多くがありますが、すべての成果の上にいくつかのダイナミックHTMLを表示することです。私はこれがブートストラップの後で良いことを知っていますが、私は今それを避けようとしています。 zf w/layouts/actionヘルパーでこのスクリプトを再作成することは、それが価値あるものよりはるかに多くの作業になります。 – whitespy9

1

ただし、カスタムの初期化が必要ならば、2つの選択肢があります。まず、_initを接頭辞とするメソッドを記述して、ブートストラップする個別のコードを指定することができます。これらのメソッドは、bootstrap()によって呼び出され、パブリックメソッドであるかのように呼び出すこともできます:bootstrap()。彼らはオプションのオプションの配列を受け入れる必要があります。 リソースメソッドが値を返す場合は、ブートストラップのコンテナに格納されます。これは、異なるリソースが相互作用する必要がある場合(あるリソースが別のリソースに別のリソースを注入する場合など)に役立ちます。これらの値を取得するには、メソッドgetResource()を使用できます。

もう1つのオプションは、リソースプラグインを使用することです。リソース・プラグインは、特定の初期化を行う目的で、指定されてもよい。

  • が明示的メソッドを介してそれらを有効にする
  • ブートストラップ・オブジェクトの初期化中Zend_Applicationオブジェクト
  • をインスタンス化するとき、ブートストラップオブジェクトへの呼び出し

リソースプラグインは、それらが発呼者とオプションの注入を可能に単にこと、及びそれらがinit()メソッドを持っていることを定義Zend_Application_Resource_ResourceAbstractを実装します。彼らはリクエストの間だけ存在するため