【问题标题】:Zend-Framework: how we do this without module?Zend-Framework:我们如何在没有模块的情况下做到这一点?
【发布时间】:2009-10-06 06:43:21
【问题描述】:

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

我是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 集成为如何将“假子操作”添加为资源? 谢谢。

【问题讨论】:

  • 我在理解你的意思时遇到了一点问题,你能否给我一个关于你正在处理的对象的想法 - 建设性的控制器/动作/子动作名称?您的动作布局问题的解决方案可能取决于您尝试执行的工作类型。
  • 基本上我正在尝试使用 zend 框架模拟没有模块目录的模块。问题在于/action/child-action。在现有动作中定义/模拟子动作的最佳方法是什么?我想将 /myModule/myController/myAction 更改为 /myController/myAction/myChildAction/ 非常感谢。

标签: zend-framework zend-acl


【解决方案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'。

【讨论】:

  • 感谢您的帮助。这意味着在每个动作函数中,我们都必须进行这些检查和转发。我可以应用任何插件或类扩展来为所有动作控制器执行此检查?
  • 你会为你的应用程序中的每一个动作都这样做吗?如果是这样,那你为什么反对模块?如果您只是为了在应用程序中执行一些操作而这样做,我可以理解为什么您可能想要采用这种方法。您可以制作自己的插件并在插件的 preDispatch 中检查子操作并相应地更改请求。
【解决方案2】:

我认为这使得它比仅使用模块目录结构复杂得多... 设置好之后,一点也不复杂,只是类的逻辑分离......

【讨论】:

  • 如果他只想在他的应用程序中执行一些操作,我可以理解为什么这种方法可能是可取的。
【解决方案3】:

添加路线会更有意义;)

拥有 :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');

【讨论】:

    猜你喜欢
    • 2020-10-21
    • 1970-01-01
    • 2021-02-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-14
    • 2019-01-18
    • 1970-01-01
    相关资源
    最近更新 更多