サブドメイン名からテナント ID を取得する Zend Framework のマルチテナント アプリケーションに取り組んでいます (mod_rewrite -> index.php -> データベースと照合します)。
私の質問は、この変数 (テナント ID) をすべてのコントローラーで使用できるように設定するにはどうすればよいですか?
レオンティ
サブドメイン名からテナント ID を取得する Zend Framework のマルチテナント アプリケーションに取り組んでいます (mod_rewrite -> index.php -> データベースと照合します)。
私の質問は、この変数 (テナント ID) をすべてのコントローラーで使用できるように設定するにはどうすればよいですか?
レオンティ
はい、Zend_Registryを使用できます。もう1つできることは、ディスパッチ前のコントローラープラグインを登録することです。これにより、コントローラーが受信する前に、tenantIDがリクエストパラメーターとして追加されます。
class YourApp_Plugin_IdWriter extends Zend_Controller_Plugin_Abstract {
public function preDispatch(Zend_Controller_Request_Abstract $request) {
$request->setParam('tenantID', ...);
}
}
あなたはあなたのapplication.iniにプラグインを登録する必要があります:
resources.frontController.plugins.access = "YourApp_Plugin_IdWriter"
Zend_Registry が適していると思います。 http://framework.zend.com/manual/en/zend.registry.html これは正しい方法ですか?
レオンティ
変数を設定するだけのフロントコントローラープラグインはオーバーヘッドが大きすぎると思います。
より簡単な方法は、ベース アクション コントローラーを作成し、そこから他のすべてを継承することです。
class MyCompany_Controller_Action extends Zend_Controller_Action
{
public function preDispatch()
{
parent::preDispatch();
$this->getRequest()->setParam('tenantId', 42);
}
}
すべてのコントローラーがこの基本コントローラーから継承されるという別の間接的な利点があるため、すべてから使用する必要がある共通のロジックを簡単に追加できます。