PHP/Zend: фатальная ошибка - класс не найден

У меня есть проект Zend со следующей структурой каталогов:

/myApp
  /application
    Bootstrap.php
    /configs
      application.ini
    /layouts
    /modules
      /default
        /controllers
          MessageController.php
          ErrorController.php
          IndexController.php
        /models
          /DbTable
            Message.php
          Message.php
          MessageMapper.php
        /views
        Bootstrap.php
      /login
        /controllers
        /forms
        /library/login
        /models
        /plugins
        /views
        Bootstrap.php
  /data/db
  /library/zend
  /public

http://localhost/ - работает нормально, но я не могу заставить работать модуль входа и сообщение внутри модуля по умолчанию. Я получаю следующую ошибку:

Неустранимая ошибка: класс Application_Module_Default_Model_MessageMapper не найден в /Library/WebServer/Documents/myApp/application/modules/default/controllers/MessageController.php в строке 14.

Я уверен, что я не инициализирую то, что мне нужно. Вот как выглядит мой код..

приложение.ini

autoloaderNamespaces[] ="Message_"
autoloaderNamespaces[] ="Login_"
autoloadernamespaces.0 = "Zend_"
resources.frontController.controllerDirectory = APPLICATION_PATH "/controllers"
resources.frontController.moduleDirectory = APPLICATION_PATH "/modules"
resources.frontController.moduleControllerDirectoryName = "controllers"
resources.frontController.defaultControllerName = "index"
resources.frontController.defaultActionName = "index"
resources.frontController.params.displayExceptions = 0
resources.frontController.defaultModule = "default"
resources.frontController.params.prefixDefaultModule = "1"
resources.frontController.plugins[] = "Login_Plugin_SecurityCheck"
resources.modules = ""

/приложение/bootstrap.php

class Bootstrap extends Zend_Application_Bootstrap_Bootstrap
{
    protected function _initDoctype()
  {
    $this->bootstrap('view');
    $view = $this->getResource('view');
    $view->doctype('HTML5');
  }
}

/public/index.php

set_include_path(implode(PATH_SEPARATOR, array(
realpath(APPLICATION_PATH . '/../library'),
get_include_path(),
)));

require_once 'Zend/Application.php';
require_once('Zend/Loader/Autoloader.php');
$autoloader = Zend_Loader_Autoloader::getInstance();

/модуль/по умолчанию/контроллеры/MessageController.php

$message = new Application_Module_Default_Model_MessageMapper();
$this->view->entries = $message->fetchAll();

Дайте мне знать, если какие-либо подробности помогут. Любая помощь приветствуется.


person Community    schedule 01.09.2011    source источник
comment
Как ваш класс определен в MessageMapper.php?   -  person ChrisA    schedule 01.09.2011
comment
У меня есть следующее: class Default_Model_MessageMapper В настоящее время он застревает в этой строке кода, которая находится в функции для получения всех сообщений из базы данных: $entry = new Application_Model_Message(); Я пробовал другие комбинации, такие как Application_Module_Default_Model_Message(); Все еще не в восторге, но комментирование этих строк приводит к загрузке страницы , так почти там!   -  person    schedule 01.09.2011


Ответы (3)


Ты пытался:

$message = new Default_Model_MessageMapper(); 

Кроме того, вы автоматически загружаете свой модуль в файл модуля Bootstrap.php? Я не уверен, насколько он изменился с тех пор, как я использовал ZF, но я должен был включить это:

$loader = new Zend_Application_Module_Autoloader(array(   
    'namespace' => 'Default_',
    'basePath'  => '/path/to/modules/default'
));
person Adrian Schneider    schedule 01.09.2011
comment
Я добавил эти две точки в свой код, однако все равно получаю сообщение об ошибке: Fatal error: Class 'Application_Module_Default_Model_Message' not found in /Library/WebServer/Documents/bollyme/application/modules/default/models/MessageMapper.php on line 56 Строка 56 моего кода: $entry = new Application_Module_Default_Model_Message(); - person ; 01.09.2011
comment
Тогда вам нужно будет обновить и его - new Default_Model_Message(); (удалить Application_Module_ из имен ваших классов) - person Adrian Schneider; 02.09.2011
comment
ИСПРАВЛЕНО! Теперь все работает.. как /message, так и /login - Приветствую всех за помощь! Удаление Application_Module определенно помогло! - person ; 02.09.2011

у меня тоже была такая же проблема, но моя причина была очень проста

у меня была форма Form_Template_Add и контроллер TemplateController. Из контроллера я вызвал форму - new Form_Template_Add();

Моя форма находится в шаблоне папки.

Проблема была с именем папки, см. «t» в шаблоне — это маленькие заглавные буквы, а «T» для имени контроллера и класса — заглавные буквы. Я изменил название папки на Template и все заработало... ура

person charles    schedule 13.10.2012

Убедитесь, что вы создали Bootstrap.php в каталоге каждого модуля, который выглядит так:

class Admin_Bootstrap extends Zend_Application_Module_Bootstrap
{}

В котором Admin — это имя модуля. Кроме того, убедитесь, что внутри каталога modules/admin/forms действительно есть файл Login.php с классом Admin_Form_Login.

[Zend_Form][ 1.11.1] Сообщение об ошибке Неустранимая ошибка: класс 'Admin_Form_Login' не найден в ...\modules\default\controllers\IndexController.php

person Community    schedule 26.04.2014