【问题标题】:Zend Forms Module Include PathsZend Forms 模块包含路径
【发布时间】:2009-10-15 13:10:25
【问题描述】:

我正在使用 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% 确定该类位于包含路径中。

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

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;
}

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

【问题讨论】:

  • 在包含文件名时请注意文件名是否为大写。这是从win切换到linux时的常见问题。
  • 您是否 100% 确定该文件具有正确的权限?
  • poconnell@foundry:~/projects/bhaa/application/forms$ ls -al SectorSearch.php -rw-r--r-- 1 poconnell poconnell 561 2009-10-15 14:41 SectorSearch .php
  • APPLICATION_PATH 的值是多少?

标签: php zend-framework


【解决方案1】:

我在我的 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;
    }

现在它可以工作了,没有错误了..该死的我很高兴它可以工作,我几乎要疯了..:)

【讨论】:

  • 你知道是否有一个配置条目可以添加以找到它吗?
【解决方案2】:

确保大小写完全匹配。 该文件夹必须命名为 Forms 除非您为 Form 类指定不同的目录并确保 SectorSearch 不是 sEcTorSEarcH.php 或其他东西

【讨论】:

    【解决方案3】:

    Zend Framework 将类名中的下划线解释为文件夹。如果您手动将 application/forms 文件夹添加到包含路径,那么您应该将您的类命名为 FormSectorSearch(以及文件名 FormSectorSearch.php)而不是 Form_SectorSearch。否则,您只需将应用程序文件夹添加到包含路径,然后将文件夹命名为 Form 而不是 forms。

    【讨论】:

      猜你喜欢
      • 2016-03-02
      • 2012-06-05
      • 1970-01-01
      • 2011-08-14
      • 2012-04-13
      • 2012-04-22
      • 2013-09-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多