Zend的表单模块包含路径(Zend Forms Module Include Paths)

2019-08-18 07:54发布

我使用Zend 1.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

我100%肯定的类是包括路径上。

我认为这是一个问题,Bootstrap逼近,这是如何我加载默认模块

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模块化形式和模型的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;
}

但没有喜悦。 有任何想法吗?

Answer 1:

确保的情况完全一致。 该文件夹,除非你指定了不同的目录被命名为形式 Form类,并确保SectorSearch不是sEcTorSEarcH.php什么



Answer 2:

我增加了以下我的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;
    }

现在它的作品,没有任何错误了..哎呀我很高兴它的工作原理,我几乎要疯了.. :)



Answer 3:

Zend框架解释在类名作为文件夹下划线。 如果手动添加应用程序/表格文件夹包含路径,那么你应该命名你的类FormSectorSearch(和文件名FormSectorSearch.php),而不是Form_SectorSearch。 否则,你只会添加应用程序文件夹包含路径,然后命名的文件夹形式,而不是形式。



文章来源: Zend Forms Module Include Paths