1

在我的 zend 框架应用程序中,我有路由和默认值,例如:

resources.router.routes.plain.defaults.module = "index"
resources.router.routes.plain.defaults.controller = "index"
resources.router.routes.plain.defaults.action = "index"

我希望能够更改任何模块或控制器或操作的默认路由,例如

让我们假设这个模块/控制器/动作结构:

content --- article --- read
                    --- write
        --- news    --- list
                    --- write
user    --- auth    --- signin
                    --- signout
        --- access  --- check
                    --- update

在这个架构中,

对于 module=content 我希望 controller=article 成为默认控制器,action=read 成为默认操作。
如果选择了 controller=news,则 action=list 成为默认操作

对于 module= user 我希望 controller=auth 成为默认控制器,而 action=signin 成为默认操作。如果选择了 controller=access,则 action=check 成为默认操作。

那么是否可以在 application.ini 中做到这一点?这个例子怎么样?

提前致谢。

4

1 回答 1

0

随机想法:


您可以为每个模块定义一个指向这些特定操作的路由作为默认值。

resources.router.routes.user.route = "user/:controller/:action/*"
resources.router.routes.user.defaults.module = "user"
resources.router.routes.user.defaults.controller = "auth"
resources.router.routes.user.defaults.action = "signin"

您还可以定义一个Module_IndexController::preDispatch()orUser_AccessController::indexAction()用于_forward将请求发送到正确的“默认值”:

// delaing with the redirect in preDispatch
// will affect all requests to this controller
class User_IndexController extends Zend_Controller_Action {
  public function preDispatch() {
    // send to default location for User Module:
    $this->_forward('signin', 'auth')
  }
}

// dealing with the redirect in indexAction:
// will only affect requests that go to the "index" action
class User_AccessController extends Zend_Controller_Action {
  public function indexAction() {
    // send to default location for User Module:
    $this->_forward('check')
  }
}

来自Zend Framework 文档 - 控制器实用程序方法

_forward($action, $controller = null, $module = null, array $params = null): 执行另一个动作。如果调用preDispatch(),当前请求的操作将被跳过以支持新的操作。否则,在处理完当前动作后,_forward()将执行中请求的动作。

于 2010-10-07T15:09:27.153 回答