zend框架中的模块配置

时间:2012-12-17 17:40:44

标签: zend-framework frameworks multi-module

我正在使用Zend Framework中的多模块CMS。我想创建一个这样的结构:

testsite/
index.php
library/
    zend/
    test/
application/
    configs/
        application.ini
    modules/
        users/
            controllers/
            models/
        ....
    frontend/
        controllers/
        models/
        ....
    backend/
        controllers/
        models/
        ...
    bootstrap.php

我创建了以下代码:

//in application.ini
resources.frontController.defaultModule = "frontend"
resources.frontController.defaultControllerName = "index"
resources.frontController.defaultAction = "index"
resources.frontController.plugins.init = "Test_Controller_Plugin_Initializer"

//in bootstrap.php
 protected function _initControllers()
{
    $this->bootstrap('frontController');
    $this->_front = $this->getResource('frontController');

    $this->_front->addControllerDirectory(APPLICATION_PATH . '/backend/controllers', 'backend');
    $this->_front->addControllerDirectory(APPLICATION_PATH . '/frontend/controllers', 'frontend');
}

 //in Test/controllers/plugin/initializer.php
 public function preDispatch(Zend_Controller_Request_Abstract $request)
{          
    $front = Zend_Controller_Front::getInstance();
    $request = $front->getRequest();

    $request->setModuleName('frontend');
    $request->setControllerName('index');
    $request->setActionName('index');
}

当我转到我的基本网址.../testsite时,它无效。你能告诉我哪里出错吗?

2 个答案:

答案 0 :(得分:0)

您是否尝试将模块放在模块目录中? 即:

testsite/
index.php
library/
    zend/
    test/
application/
    configs/
        application.ini
    modules/
        users/
            controllers/
            models/
        ....
        frontend/
            controllers/
            models/
            ....
        backend/
            controllers/
            models/
            ...
    bootstrap.php

通常,zf希望找到它的模块。您可能需要调整rapplication.ini设置以反映这一点。

答案 1 :(得分:0)

要使其工作,您希望它如何引用Zend_Application_Resource_Frontcontroller

具体而言,您需要传递'module'=>的数组。 'controller'目录对resources.frontController.controllerDirectory

  

controllerDirectory: 指定单个字符串的字符串值   控制器目录,或模块到控制器目录的数组   对

我怀疑这会解决所有问题,但它应该引导你朝着正确的方向前进。