Zend Framework - 在不同的模块中重定向到IndexController

时间:2011-05-11 18:43:44

标签: php model-view-controller zend-framework zend-framework-mvc zend-framework-modules

所有

我在Zend的mvc Framework中设置了以下项目。在访问应用程序时,我希望用户重定向到“移动”模块,而不是转到“默认”模块中的IndexController。我该怎么做?

-billingsystem
-application
    -configs
        application.ini
    -layouts
        -scripts
            layout.phtml
    -modules
        -default
            -controllers
                IndexController.php
            -models
            -views
            Bootstrap.php
        -mobile
            -controllers
                IndexController.php
            -models
            -views
            Bootstrap.php
Bootstrap.php
-documentation
-include
-library
-logs
-public
    -design
        -css
        -images
        -js
    index.php
    .htaccess

我的index.php包含以下代码:

require_once 'Zend/Application.php';
require_once 'Zend/Loader.php';


$application = new Zend_Application(
  APPLICATION_ENV,
  APPLICATION_PATH . '/configs/application.ini'
);

$application->bootstrap()->run();

2 个答案:

答案 0 :(得分:3)

您可以在控制器中使用

 _forward(string $action, 
          string $controller = null, 
          string $module = null, 
          array $params = null)

例如:

$this-_forward("index", "index", "mobile");

这将转到索引操作,移动模块的索引控制器,您也可以使用null

$this-_forward(null, null, "mobile");

传递null将使用当前操作和控制器。

希望有所帮助。

答案 1 :(得分:3)

您有两种选择:

1- set mobile作为应用程序的默认模块,通过编辑application.ini文件 resources.frontController.defaultModule = "mobile"

2-您可以创建一个插件来拦截每个请求并转发到同一个控制器和操作但是移动模块

class Name_Controller_Plugin_mobile extends Zend_Controller_Plugin_Abstract {

    public function preDispatch(Zend_Controller_Request_Abstract $request) {

                $module = $request->getModuleName();
                $controller = $request->getControllerName();
                $action = $request->getActionName();
                if($module !== "mobile" || $module !== "error"){
                  return $request->setModuleName("mobile")->setControllerName("$controller")
                    ->setActionName("$action")->setDispatched(true);

                 }else{
                   return ;
                 }
    }
}

并且不要忘记将错误控制器添加到if子句中,这样当你的应用程序抛出错误时你不会得到神秘的循环,那就是它