代码之家  ›  专栏  ›  技术社区  ›  Rick de Graaf

模块中的Zend模块

  •  6
  • Rick de Graaf  · 技术社区  · 14 年前

    目前我使用管理模块,使用如下URL:

    public/admin/index/index
    

    文件夹结构如下:

    applications
    -- modules
    ---- admin
    ------ controllers
    ------ views [and so on]
    

    public/admin/news/index/index
    public/admin/gallery/index/index
    

    新闻和画廊是模块

    文件夹结构如下

    applications
    -- modules
    ---- admin
    ------ controllers
    ------ views
    -------- scripts
    ---------- modules
    ------------ news
    -------------- controllers
    -------------- views [and so on]
    ------------ gallery
    -------------- controllers
    -------------- views [and so on]
    

    $moduleLoader = new Zend_Application_Module_Autoloader(array(
                'namespace' => 'Module',
                'basePath' => APPLICATION_PATH . '/modules/admin/views/scripts/modules'));
    

    但那没有成功。 我可以创建新闻,画廊和这样的模块,并加载到我的管理布局。所有的东西都将在相同的风格和菜单作为管理的其他人,但我宁愿看到我的方式(如果可能的话)

    2 回复  |  直到 14 年前
        1
  •  11
  •   Fge    14 年前

    模块是逻辑链接功能的集合(例如,库)。为了简单起见,您应该将模块的所有相关代码存储在其目录中(这还包括任何管理任务)。在adminModule中,有几个其他模块的代码,这使得这两个模块很难重用,因为它们都依赖于adminModule,而adminModule依赖于所有其他模块。这完全打破了模块的概念。如果这有助于理解,您可以将控制器视为子模块(我知道这是错误的,但也许这会使理解变得更容易)。

    • 图库模块
      • 图像控制器(viewAction、browseAction…)
      • 管理员控制器(editImage、uploadImage…)
      • ...
      • 设置控制器
      • 管理员
      • ...


    所以(至少我是这么做的):

    • 图库模块
      • ....

    这使得所有逻辑上属于的东西都在一起。一个控制器负责一个实体的所有操作(就像ImageController负责与 图为厨房操作控制器。这还包括管理任务。
    如果这样做,可能就没有真正的AdminModule。它只是某种导航链接到每个模块/控制器的管理操作。

    您确实可以重写zf以支持子模块。这将涉及:

    • 重写分派器以支持子模块
    • 重写子模块的自动加载程序
    • 向插件加载程序添加其他几个目录

    但这并不是在我见过的任何mvc框架中完成的,因为这通常意味着设计上的缺陷(同样,在我的操作中)和一般性能的松散(查找autoloader的目录越多,情况就越糟)。

        2
  •  0
  •   takeshin    14 年前

    ZF目录结构可定制,主要通过:

    • 前控制器选项(例如。 setControllerDirectory() , addPluginPath() 等)
    • addPath() , addHelperPath()
    • 自动装弹机,例如。 _resourceLoader