具有共同资源的Zend Framework模块

时间:2011-03-31 19:04:21

标签: php zend-framework

我在弄清楚如何拥有模块化目录结构方面遇到了很多麻烦,能够加载要跨模块共享的资源。即,

application
--- /forms
--- /models
--- /modules
------/module1/
---------/models
------/module2/
---------/models

现在,我要做的是从模块中加载/ application / forms中的表单。我尝试过的所有内容都导致这些类无法加载。

我试过了: 1)让Zend尝试自动计算出来。 2)为应用程序路径和模块指定主引导程序中的所有路径。即,

protected function _initAutoload()
{
    $front = $this->bootstrap("frontController")->frontController;
    $modules = $front->getControllerDirectory();
    $default = $front->getDefaultModule();

    $moduleloader = new Zend_Application_Module_Autoloader(array(
        'namespace' => 'Application',
        'basePath'  => APPLICATION_PATH
    ));

    foreach (array_keys($modules) as $module) {
        $moduleloader = new Zend_Application_Module_Autoloader(array(
            'namespace' => ucfirst(strtolower($module)),
            'basePath'  => $front->getModuleDirectory($module))
        );
    }
}

3)多次在我的桌子上砸我的头。

..是的,我意识到我不需要那个模块循环,因为我在每个模块目录中都有空白的bootstraps。

欢迎任何建议。谢谢!

1 个答案:

答案 0 :(得分:0)

试试这个:

protected function _initAutoload()
{
    $autoloader = new Zend_Application_Autoloader_Resource(array(
        'namespace' => 'Application',
        'basePath'  => APPLICATION_PATH,
        'resourceTypes' => array(
            'form' => array(
                'path' => 'forms/',
                'namespace' => 'Form'
            )
        )
    ));

    return $autoloader;
}

您不需要模块部件,因为您似乎已经知道了。根据需要添加其他资源类型。

由于这与您已经非常接近,可能还有另一个问题。以上应该假设:

  • APPLICATION_PATH指向应用程序的/ application目录
  • 表单类名为Application_Form_Something
  • 这些类的文件名是Something.php(区分大小写)

e.g。如果您有联系表单,可以致电课程Application_Form_Contact,这将在application/forms/Contact.php生效。

如果您仍然遇到问题,请提供一个未找到的表单类示例,以及您调用它的方式和位置。