12

ブートストラップ ファイル内からリクエスト オブジェクトを取得するにはどうすればよいですか?

この方法を試すことはできますが、うまくいきません。

$request= new Zend_Controller_Request_Http();
$request = Zend_Controller_FrontController::getInstance()->getRequest();
4

3 に答える 3

12

どうしてもやりたい場合は、次の呼び出しを実行できます。

public function _initRequest()
{
    $this->bootstrap('frontController');
    $front = $this->getResource('frontController');
    $front->setRequest(new Zend_Controller_Request_Http());

    $request = $front->getRequest();
}

ただし、Response オブジェクトから必要なほとんどのデータは、フロント コントローラーがディスパッチされた後に利用可能になるため (モジュール、コントローラー、またはアクション名など)、これは避ける必要があります。

Response オブジェクトに格納されているその他の変数は、 などのグローバル配列から抽出されるか$_SERVER例外的にブートストラップで直接読み取ることができます。$_POST$_GET

しかし、ほとんどの場合、フロント コントローラー プラグインで Response オブジェクトを使用する必要があります。

class Your_Controller_Plugin_PluginName extends Zend_Controller_Plugin_Abstract
{
     public function preDispatch(Zend_Controller_Request_Abstract $request)
     {
         // do anything with the $request here
     }
}
于 2010-04-13T07:41:07.207 に答える
10

ディスパッチループが表示された場合、ブートストラップはリクエストで実行される前のアクションであるという考えがあるため、リクエストオブジェクトを取得するべきではありません。

アプリケーションの一部を変更する必要がある場合は、コントローラープラグインを使用して変更します。

于 2010-04-12T17:49:24.340 に答える
0

最初に frontController をブートストラップする必要があります。次のようにしてみてください。

function initFoo()
{
    $this->bootstrap('frontController');
    $req = $this->frontController->getRequest();
}
于 2010-04-12T16:11:58.157 に答える