2009-08-15 8 views
0

私はZend Framework 1.8/1.9のZend_Applicationとリソースシステムを使用して、リソースの束を初期化しています。私は、要求されているモジュールに基づいて、特定の.iniファイルを読み込みたいだけです。たとえば、CMSモジュールが要求されている場合は "help.ini"を読み込みます( "/ cms")。問題は、Zend_Application_Resource_ResourceAbstractサブクラスでリクエストオブジェクトにアクセスする方法がわかりません。ルートやモジュールに基づいてリソースを初期化する

私のリソースの1つ(CMSのカスタムルートを初期化するため)で、ハックな小さなutilを使用してモジュール(以下)を取得し、 "cms"モジュール名に一致するカスタムルートを追加します:

/** 
* Grab the module name without a request instance 
* 
* @return string The module name 
*/ 
public static function getModuleName() 
{ 
    $uri = ltrim($_SERVER["REQUEST_URI"], "/"); 
    $module = substr($uri, 0, strpos($uri, "/")); 
    return $module; 
} 

$module = Typeoneerror_Util_Strings::getModuleName(); 

// -- only attach certain routes if using cms module 
if ($module == Typeoneerror_Constants::CMS_MODULE) 
{ 
    ... 

私は、すなわち、要求オブジェクトがクラスに渡されるコントローラプラグインのように、これはより多くの "Zendの-Y" になりたい:

public function preDispatch(Zend_Controller_Request_Abstract $request) 
{ 
    $router = $this->__front->getRouter(); 
    ... 

アイデア? Zend_Controller_Frontdispatch()メソッドが呼び出されるまでしかし、リクエストオブジェクトは、一般的に構築されていない

$bootstrap = $this->getBootstrap(); 
$bootstrap->bootstrap('frontController'); // make sure it's initialized 
$fc = $bootstrap->getResource('frontController'); 
// Then I'm sure you know how to get the request from there. 

:あなたのResourceAbstractサブクラスからは、あなたがそうのようなフロントコントローラを取得することができます直接あなたの質問に答えるために

答えて

2

。要するに、あなたが探している要求オブジェクトはまだ存在しません。したがって、のインスタンスを手動で構築してZend_Controller_Request_Httpとし、それをフロントコントローラに渡すことができます。

でも、いずれもまだルーティングされていないため、リクエストオブジェクトの表示に使用していたパラメータは設定されていません。

基本的には、Zend_Applicationに起こるものは、あなたがやりたいのは時期尚早、アプリケーションのライフサイクルにおける方法です。

フロントコントローラープラグインのrouteShutdownフックで、モジュール固有の読み込みを行うことを強くお勧めします。

+0

"ルータが要求のルーティングを終了した後、" routeShutdown()が呼び出されます。 " - まさに私が探していたもの!コントローラープラグインイベントの「ライフサイクル」について、もっと研究していたはずです。よくやった! – typeoneerror

関連する問題