Я использую 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% уверен, что класс включен в путь 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; }
Я даже попытался использовать этот шаблон, как это рекомендовано при загрузке модульных форм и моделей в 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; }
но никакой радости. есть идеи?
Убедитесь, что регистр соответствует точно. Папка должна быть названа Forms, если вы не указали другой каталог для классов Form
и убедитесь, что SectorSearch не является sEcTorSEarcH.php
или чем-то
Я добавил следующее в файл 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; }
и теперь это работает, никаких ошибок больше .. черт возьми, я рад, что это работает, я почти сошел с ума .. 🙂
Zend Framework интерпретирует символы подчеркивания в именах классов в виде папок. Если вы вручную добавляете папку приложения / форм в путь включения, то вместо Form_SectorSearch вы должны называть свой класс FormSectorSearch (и имя файла FormSectorSearch.php). В противном случае вы добавили бы только папку приложения в путь include и затем указали папку Form вместо форм.