我正在使用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;
}
但没有快乐。任何想法?
答案 0 :(得分: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;
}
现在它起作用了,没有任何错误..该死的我很高兴它有效,我差点疯了.. :)
答案 1 :(得分:1)
确保案例完全匹配。
该文件夹必须命名为表单,除非您为Form
类指定了不同的目录,并确保 SectorSearch 不是sEcTorSEarcH.php
或其他
答案 2 :(得分:0)
Zend Framework将类名称中的下划线解释为文件夹。如果您手动将application / forms文件夹添加到include路径,那么您应该将您的类命名为FormSectorSearch(和文件名FormSectorSearch.php),而不是Form_SectorSearch。否则,您只需将应用程序文件夹添加到包含路径,然后将文件夹命名为Form而不是表单。