【问题标题】:How can I access one module within other modules in Zend Framework?如何在 Zend Framework 的其他模块中访问一个模块?
【发布时间】:2011-04-25 05:17:49
【问题描述】:

我已经创建了如下的zend框架结构

application
  - configs
  - controllers
  - models
  - modules
     - admin
         - controllers
         - models
         - views
         ...
     - user
         - controllers
         - models
         - views
         ...
     - account
         - controllers
         - models
         - views
         ...
     - profile
         - controllers
         - models
         - views
         ...
  - views   
.....

我正在创建一个应用程序,它具有“用户”和“管理员”两个不同的用户角色。用户和管理员都应该访问模块配置文件,并且只有管理员才能访问帐户模块。目前我面临以下问题

当我以管理员身份登录时,我在地址栏中得到以下网址,并且我得到了管理员菜单和设计(布局),正如我所期望的那样 localhost/public/admin/index

但是当我点击页面中的编辑配置文件链接时,我丢失了管理布局并且浏览器重定向到 localhost/public/profile/edit URL。 用户模块也有同样的问题。

我真正需要的是,当我单击编辑配置文件链接时,我应该能够访问具有相同布局的页面(管理员的管理布局),并且 url 应该类似于 http://localhost/public/admin/profile/edit

当我拥有上面给出的模块时,是否可以使用 zend 框架?因为我需要将系统保持在一个模块的基础上,我不想一次又一次地重做相同的代码。我检查了 zend 论坛,但我无法找到我所问的正确答案。

谁能帮我解决这个问题。 提前致谢。 亲切的问候,

【问题讨论】:

    标签: php zend-framework


    【解决方案1】:

    是的,可以在您的系统中创建 plugin_architechture,但我认为您的结构还不合适。

    application
      - configs
      - controllers
      - models
      - modules
         - admin (Backend Modules)
             - user
                 - controllers
                 - models
                 - views
                 ...
             - account
                 - controllers
                 - models
                 - views
                 ...
             - profile
                 - controllers
                 - models
                 - views
                 ...
         - front (Frontend Modules)
             - user
                     - controllers
                     - models
                     - views
                     ...
                 - account
                     - controllers
                     - models
                     - views
                     ...
                 - profile
                     - controllers
                     - models
                     - views
    

    您需要创建两个模块,1) 后端 2) 前端(默认)。

    您还需要编写一些代码,或者您应该创建自己的自动加载库来理解您的新型 url。例如,如果我想进入管理区域的 EDIT 配置文件系统,那么您的 url 将是,

    http://www.server.com/admin/profile_edit/edit/id=99
    

    所以在这种情况下,

    1) admin = module
    2) profile = inner module of ADMIN 
    3) edit = controller file inside profile module
    4) edit = action function name in controller file (editAction())
    5) id = parameter to pass 
    

    要实现这个结构,你需要做的是,

    创建您自己的自动加载库,扩展 Zend 库的文件和类,这些库负责从 url 解码模块/控制器/动作。

    我亲自创建了这个结构并且它工​​作正常。你应该在那些文件夹文件中搜索,

    /library/zend/Controller/Action
    /library/zend/Controller/Dispatcher
    

    如果您有任何困惑,请告诉我。

    【讨论】:

      【解决方案2】:

      模块将单独访问,但在布局中您可以根据用户/管理员设置菜单。您需要将会话变量 a/c 用于登录用户,并且必须在呈现个人资料页面的文件中传递它们。 即:

      将会话变量传递给索引菜单文件,并相应地显示菜单。到时候布局问题就解决了。

      【讨论】:

        【解决方案3】:

        首先很难确定您的问题,请明确说明,以便有人帮助您。我所理解的是 “我丢失了管理布局,浏览器重定向到 localhost/public/profile/edit URL。”

        1. 您丢失了布局,可能是因为您在当前控制器中更改了它或禁用了它。 毫无疑问,为什么您不能在多个模块中使用单一布局。
        2. 浏览器被重定向是因为你这样做了。

        对不起,如果我没说清楚,但我是最好的,因为我能理解你的问题。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多