Автозагрузка класса в MVC Zend Framework не работает - PullRequest
4 голосов
/ 12 сентября 2010

Я закончил свое первое веб-приложение в MVC Zend Framework, и все отлично работает на моем локальном хосте.

Поэтому я загружаю его на сервер, и возникает проблема с автозагрузкой моего класса. Я получаю сообщение об ошибке, когда хочу создать объект из моего класса в indexcontroller:

$this->view->bottomCache = new Application_Model_Cache($this->cacheTime,'bottomCache');

И я получаю сообщение об ошибке:

Fatal error: Class 'Application_Model_Cache' not found in ........./IndexController.php on line 19

На моем локальном хосте я использую Zend Server CE, и там он работает.

Пожалуйста, не могли бы вы дать мне несколько советов, что я бы проверил, чтобы узнать, почему это не работает?

РЕШИТЬ: первая буква имени класса должна быть заглавной, Cache.php

EDIT2: Папка модели против модели Как вы можете видеть в этом примере

// application/models/Guestbook.php

class Application_Model_Guestbook
{

EDIT1: Я использовал учебник по http://framework.zend.com/manual/en/learning.quickstart.create-project.html,, поэтому я использовал файловую структуру, которая там есть.

quickstart
|-- application
|   |-- Bootstrap.php
|   |-- configs
|   |   `-- application.ini
|   |-- controllers
|   |   |-- ErrorController.php
|   |   `-- IndexController.php
|   |-- models
|   |   |-- cache.php
|   |   `-- DbTable
|   |       `-- Downloaded.php
|   `-- views
|       |-- helpers
|       `-- scripts
|           |-- error
|           |   `-- error.phtml
|           `-- index
|               `-- index.phtml
|-- library
|-- public
|   |-- .htaccess
|   `-- index.php

Bootstrap.php В моем багажнике у меня есть:

class Bootstrap extends Zend_Application_Bootstrap_Bootstrap
{
  protected function _initAutoload() {

        $autoloader = new Zend_Application_Module_Autoloader(array(
                    'namespace' => 'Application_',
                    'basePath' => dirname(__FILE__),
                ));;
        $autoloader->addResourceType('model', 'model/', 'Model');
        return $autoloader;
  }

  protected function _initDoctype()
  {
    $this->bootstrap('view');
    $view = $this->getResource('view');
    $view->doctype('XHTML1_TRANSITIONAL');
  }
}

application.ini

[production]
phpSettings.display_startup_errors = 0
phpSettings.display_errors = 0
includePaths.library = APPLICATION_PATH "/../library"
bootstrap.path = APPLICATION_PATH "/Bootstrap.php"
bootstrap.class = "Bootstrap"
appnamespace = "Application"
resources.frontController.controllerDirectory = APPLICATION_PATH "/controllers"
resources.frontController.params.displayExceptions = 0
resources.layout.layoutPath = APPLICATION_PATH "/layouts/scripts/"
phpSettings.date.timezone = "Europe/London"
resources.db.adapter = PDO_MYSQL
resources.db.params.host = localhost
resources.db.params.username = *****
resources.db.params.password = ****
resources.db.params.dbname = *****
resources.db.params.charset = "utf8" 
resources.db.params.names = "utf8" 
resources.view.doctype = "XHTML1_TRANSITIONAL"

[staging : production]

[testing : production]
phpSettings.display_startup_errors = 1
phpSettings.display_errors = 1

[development : production]
phpSettings.display_startup_errors = 1
phpSettings.display_errors = 1
resources.frontController.params.displayExceptions = 1

Ответы [ 2 ]

1 голос
/ 12 сентября 2010

Edit2: Вы должны вызвать ваш файл cache.php Cache.php.Его дело чувствительное.Попробуйте это.

Редактировать: в вашей структуре это папка Models (см.).Вы вызываете класс с помощью

Application_Model_Cache

Так что ZF ищет его в приложении / модели /.

Поэтому измените свой класс на

Application_Models_Cache

Не забудьтесделать это внутри кода классов.Или измените имя папки на модель (кажется, что все ваши коды ссылаются на модели, поэтому изменение папки кажется самым быстрым способом.

0 голосов
/ 19 марта 2011

Ваш класс Application_Model_Cache, который должен быть найден в ./application/models, где имя файла должно быть Cache.php.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...