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');
}
}
