Php/zend framework/複数プロジェクト
提供: 初心者エンジニアの簡易メモ
フロントコントローラに設置する場合
$front->addModuleDirectory('/path/to/application/modules');
次のような構造を想定 application/ modules/ default/ controllers/ foo/ controllers/ bar/ controllers/ http://example.com/foo/controller1/action1/ foo/controller.phpのaction1メソッドにアクセス
zend_applicationで設定する場合
application.iniに以下を設定
resources.frontController.moduleDirectory = APPLICATION_PATH "/modules"
複数プロジェクトでSmartyを使う場合
application.ini
; module内bootstrap実行 resources.modules[] =
application/modules/default/Bootstrap.php
require_once dirname(__FILE__) . '/plugins/SmartyPlugin.php'; class Default_Bootstrap extends Zend_Application_Module_Bootstrap { /** * Smarty初期設定 */ protected function _initSmarty() { $this->bootstrap("FrontController"); $front = $this->getResource("FrontController"); $front->registerPlugin(new Default_SmartyPlugin()); } }
application/modules/default/plugins/SmartyPlugin.php
require_once APPLICATION_PATH . '/models/logic/SmartySetLogic.php'; /** * Smartyプラグイン設定 */ class Default_SmartyPlugin extends Zend_Controller_Plugin_Abstract { public function dispatchLoopStartup(Zend_Controller_Request_Abstract $request) { if ('default' != $request->getModuleName()) { // If not in this module, return early return; } // モジュールDIR設定 $moduleDir = dirname(__FILE__) . '/..'; // Smarty設定ロジック $logic = new SmartySetLogic(); $logic->execLogic($moduleDir); } }
application/models/logic/SmartySetLogic.php
require_once APPLICATION_PATH . '/../library/Custom/View/Smarty.php'; /** * Smartyテンプレート設定 */ class SmartySetLogic { public function execLogic($moduleDir) { // Smartyプロパティ設定 $setting = new stdClass(); $setting->left_delimiter = '{{'; $setting->right_delimiter = '}}'; $setting->template_dir = $moduleDir . '/views/templates'; $setting->compile_dir = $moduleDir . '/views/compiles'; // Custom_View_Smartyを生成し上書きする $view = new Custom_View_Smarty(null, $setting); $viewRenderer = Zend_Controller_Action_HelperBroker::getStaticHelper('viewRenderer'); $viewRenderer->setView($view) ->setViewBasePathSpec($setting->template_dir) ->setViewScriptPathSpec(':controller/:action.:suffix') ->setViewScriptPathNoControllerSpec(':action.:suffix') ->setViewSuffix('tpl'); } }