【问题标题】:module configuration in zend frameworkZend框架中的模块配置
【发布时间】:2012-12-17 17:40:43
【问题描述】:

我正在使用 Zend 框架中的多模块 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');
}

当我转到我的基本 URL .../testsite 时它不起作用。你能告诉我哪里出错了吗?

【问题讨论】:

  • 显示 .htaccess 文件中的内容
  • 在我的 .htaccess 中,我有这样的代码: RewriteEngine On RewriteCond %{REQUEST_FILENAME} -s [OR] RewriteCond %{REQUEST_FILENAME} -l [OR] RewriteCond %{REQUEST_FILENAME} -d RewriteRule ^ .*$ - [NC,L] RewriteRule ^.*$ index.php [NC,L]
  • 您似乎遇到了安全问题。 /testsite/ 目录中的 Index.php,它使您的应用程序中的所有内容都可能是可服务的。不是一个好主意。您至少应该实现一个公共或 html 目录并将您的应用程序放在您的 docroot 之外。

标签: zend-framework frameworks multi-module


【解决方案1】:

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

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

Wich 通常是 zf 期望找到其模块的地方。您可能需要调整 rapplication.ini 设置以反映这一点。

【讨论】:

  • 我知道这种典型的配置。但我想做一些不同的事情。
【解决方案2】:

要按照您希望的方式进行这项工作,请参考Zend_Application_Resource_Frontcontroller

具体来说,您需要将 'module' => 'controller' 目录对数组传递给 resources.frontController.controllerDirectory

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-19
    相关资源
    最近更新 更多