如何访问Zend Framework中其他模块中的一个模块?

时间:2011-04-25 05:17:49

标签: php zend-framework

我已经创建了zend框架结构,如下所示

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

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

当我以管理员身份登录时,我在地址栏中获得以下网址,我正在按照我的预期完成管理菜单和设计(布局) 的本地主机/公共/管理/索引

但是当我点击页面中的编辑个人资料链接时,我丢失了管理员布局,浏览器重定向到 localhost / public / profile / edit 网址。 用户模块也存在同样的问题。

我真正需要的是当我点击编辑个人资料链接时,我应该能够访问具有相同布局的页面(admin的管理员布局),并且网址应该是类似的 http://localhost/public/admin/profile/edit

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

任何人都可以帮助我解决这个问题。 提前致谢。 亲切的问候,

3 个答案:

答案 0 :(得分: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)前端(默认)。

您还需要破解某些编码,或者您应该创建自己的自动加载库来了解您的新类型的网址。例如,如果我想进入管理区域的EDIT个人资料系统,那么你的网址就是,

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

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

答案 1 :(得分:0)

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

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

答案 2 :(得分:0)

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

  1. 您丢失了布局可能是因为您在当前控制器中更改了它或禁用了它。 毫无疑问,为什么你不能在多个模块中使用单一布局。
  2. 浏览器被重定向,因为你是这样做的。
  3. 对不起,如果我没有意义,但我最了解你的问题。