facebook twitter hatena line email

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