所有
我在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();
答案 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子句中,这样当你的应用程序抛出错误时你不会得到神秘的循环,那就是它