0

抱歉,这是一个很长的问题,但我想在这里进行一些讨论。

我是 zend 的新手,并尽量避免使用模块,因为我认为 zend 的视图方面非常灵活,模块会增加额外的目录和混乱。但是我想知道一件事。我正在构建的应用程序非常大,它实际上在应用程序中具有模块概念。

我知道如果使用模块,事情可以更有条理,您可以将模块放在自己的目录中,并拥有单独的视图和控制器等。

但是我决定以以下形式模拟模块目录

--lang/module(实际上是控制器)/controller(就是动作)/action(就是子动作)/other-params/--

我们如何进行这种模拟

我最初的想法是向应用程序添加另一条路线,将第四个参数作为子动作。例如

类 some_controller 扩展 Zend_Controller_Action{

public function someAction{

    switch (child-action) {
        case 'child-action1':
            ....... excute some action
            break;
        case 'child-action2':
            ....... excute some action
            break;....
    }

}

类似的东西。这有意义还是有其他方法?通过这种方法,我们如何将 Zend_ACL 集成为如何将“假子操作”添加为资源?谢谢你。

4

3 回答 3

1

也许你可以像这样设置你的路线:

 /:controller/:action/:child-action

有关设置路线的更多信息,请参见此处。

然后在您的操作方法中:

 $childAction = $this->getParam('child-action');

 // convert $childAction to camelCase.

 if(method_exists($this, $childAction))
 {
      // Check ACL
      $this->$childAction();
 }

不要使用 Action 后缀命名子操作,因为这将允许直接调用操作。你也许可以用'fooChild'之类的东西而不是'fooChildAction'作为后缀,因为它们会映射到'foo-child'。

于 2009-10-06T08:17:53.300 回答
0

我认为这使它变得更加复杂,然后只使用模块目录结构......一旦设置,根本没有那么复杂,它只是类的逻辑分离......

于 2009-10-06T10:49:28.627 回答
0

添加路线会更有意义;)

有 :module/:controller/:action/ -> admin/posts/add

和 :module/posts/add/:action -> admin/posts/add/concept 将链接到 PostsAddController::ConceptAction();

我猜比 switch 语句更好;)但你可以用它来... case "sth": $this->_forward('my-action','my-controller');

于 2009-10-06T11:22:40.200 回答