代码之家  ›  专栏  ›  技术社区  ›  emeraldjava

Zend窗体模块包含路径

  •  2
  • emeraldjava  · 技术社区  · 16 年前

    我正在使用Zend1.8.4并设置一个简单的表单测试。我的窗体类位于“./application/forms/SectorSearch.php”中,类名为

    <?php
    class Form_SectorSearch extends Zend_Form
    {...}
    

    我的控制器在init()方法中创建一个新窗体

    <?php
    class SectorController extends Zend_Controller_Action
    {
        function init()
        {
            $this->initView();
            $form = new Form_SectorSearch(array(
                'method' => '/public/sector/search',
                'action' => 'post'));
            $this->view->form = $form;
        }
    ..
    }
    

    但我得到了这个错误

    Warning: Zend_Loader_Autoloader_Resource::include(/home/poconnell/projects/bhaa/application/forms/SectorSearch.php) [zend-loader-autoloader-resource.include]: failed to open stream: No such file or directory in /home/poconnell/projects/bhaa/library/Zend/Loader/Autoloader/Resource.php on line 178
    
    Warning: Zend_Loader_Autoloader_Resource::include() [function.include]: Failed opening '/home/poconnell/projects/bhaa/application/forms/SectorSearch.php' for inclusion (include_path='/home/poconnell/projects/bhaa/library:/home/poconnell/projects/bhaa/application:.:/usr/share/php:/usr/share/pear') in /home/poconnell/projects/bhaa/library/Zend/Loader/Autoloader/Resource.php on line 178
    
    Fatal error: Class 'Form_SectorSearch' not found in /home/poconnell/projects/bhaa/application/controllers/SectorController.php on line 19
    

    我百分之百肯定这个类在include路径上。

    我认为这是一个引导问题,这就是我加载默认模块的方式

    protected function _initAutoload()
    {   
        //Zend_Loader_Autoloader_Resource  - Zend_Application_Module_Autoloader
        $moduleLoader = new Zend_Application_Module_Autoloader(array(
            'namespace' => '', 
            'basePath' => APPLICATION_PATH
        ));
        return $moduleLoader;
    }
    

    我甚至尝试使用这种模式,正如 Autloading modular forms & models in Zend Framework 1.8

    protected function _initAutoload()
    {   
        //Zend_Loader_Autoloader_Resource  - Zend_Application_Module_Autoloader
        $moduleLoader = new Zend_Application_Module_Autoloader(array(
            'namespace' => '', 
            'basePath' => APPLICATION_PATH,
            'resourceTypes' => array (
                'form' => array(
                'path' => 'forms',
                'namespace' => 'Form'))
        );
        return $moduleLoader;
    }
    

    但没有欢乐。有什么想法吗?

    3 回复  |  直到 15 年前
        1
  •  1
  •   mike    16 年前

    确保箱子完全匹配。 文件夹必须命名 形式 除非为指定了不同的目录 Form 上课并确保 扇区搜索 不是 sEcTorSEarcH.php 或者什么

        2
  •  2
  •   starlover    16 年前

    我在bootstrap.php文件中添加了以下内容

    protected function _initAutoload()
        {
            $autoloader = new Zend_Loader_Autoloader_Resource(array(
                'namespace' => '',
                'basePath' => APPLICATION_PATH,
                'resourceTypes' => array(
                    'form' => array(
                        'path' => 'forms',
                        'namespace' => 'Form',
                    ),
                    'model' => array(
                        'path' => 'models',
                        'namespace' => 'Model',
                    ),
                )
            ));
            return $autoloader;
        }
    

    现在它开始工作了,不再有错误了。该死的,我很高兴它起作用,我快疯了。:)

        3
  •  0
  •   Jacob Fike    16 年前

    Zend框架将类名中的下划线解释为文件夹。如果要手动将application/forms文件夹添加到include路径中,则应将类命名为form sectorsearch(以及文件名form sectorsearch.php),而不是将其命名为form sectorsearch。否则,您只需将应用程序文件夹添加到include路径,然后将文件夹表单命名为而不是表单。