Zend-Framework:我们如何在没有模块的情况下做到这一点?

时间:2009-10-06 06:43:21

标签: zend-framework zend-acl

对不起,这是一个很长的问题,但我想在这里做一些讨论。

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

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

然而我决定以

的形式模拟模块目录

- lang / module(实际上是控制器)/ controller(这是动作)/ action(那是child-action)/ other-params / -

我们如何进行并进行此类模拟

我最初的想法是为应用程序添加另一条路径,将第4个参数作为子动作。 e.g

class some_controller extend extends 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集成为如何将“假儿童行动”作为资源添加? 谢谢。

3 个答案:

答案 0 :(得分:1)

也许您可以这样设置路线:

 /:controller/:action/:child-action

有关设置路线的详细信息,请参阅here

然后在你的行动方法中:

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

 // convert $childAction to camelCase.

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

不要使用Action后缀命名子操作,因为这样可以直接调用操作。您可以使用类似'fooChild'的内容对其进行后缀,但不能使用'fooChildAction',因为它们会映射到'foo-child'。

答案 1 :(得分:0)

我认为这比使用模块目录结构更加复杂...... 这一次设置并不复杂,它只是类的逻辑分离......

答案 2 :(得分:0)

添加路线会更有意义;)

拥有:module /:controller /:action / - >管理/帖/添加

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

比切换语句更好我猜;)但是你可以用它来......案例“......”:$ this-> _forward('my-action','my-controller');