2009-10-15 3 views
2

Я использую Zend 1.8.4 и настраиваю простой тест формы. Моя форма класса расположена в «./application/forms/SectorSearch.php» и имя классаZend Forms Module Include Paths

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

Но я 'm получение этой ошибки

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% уверен, что класс включен в путь включения.

Я думаю, что это вопрос bootstraping, и это, как я загружаю модуль по умолчанию

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

Позаботьтесь о том, чтобы имена файлов находились в UperCase по мере их включения. Это обычная проблема при переключении с win на linux. – powtac

+0

Вы на 100% уверены, что файл имеет правильные разрешения? – PatrikAkerstrand

+0

poconnell @ литейное производство: ~/projects/bhaa/application/forms $ ls -al SectorSearch.php -rw-r-r-- 1 poconnell poconnell 561 2009-10-15 14:41 SectorSearch.php – emeraldjava

ответ

1

Убедитесь, что дело точно соответствует. папки должна называться форм, если не указан другой каталог для Form классов и убедитесь, что SectorSearch не sEcTorSEarcH.php или что-то

0

Zend Framework интерпретирует символы подчеркивания в именах классов, как папки. Если вы вручную добавляете папку приложения/форм в путь включения, то вместо Form_SectorSearch вы должны называть свой класс FormSectorSearch (и имя файла FormSectorSearch.php). В противном случае вы добавили бы только папку приложения в путь include и затем указали папку Form вместо форм.

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

и теперь он работает, никаких ошибок больше .. блин я рад, что это работает, я почти сходит с ума .. :)

+0

Знаете ли вы, есть ли запись конфигурации, которую вы можете добавить, чтобы ее можно было найти? – jackyalcine