Автозагрузчик Zend не работает на живом сайте - PullRequest
2 голосов
/ 29 сентября 2010

Я только что скопировал свой сайт разработчика на работающий сервер, обновил конфиги с новыми сведениями о подключении к БД и т. Д., Но получил следующее сообщение об ошибке:

Fatal error: Uncaught exception 'Zend_Loader_PluginLoader_Exception' with message `'Plugin by name 'IncludeStyles' was not found in the registry; used paths: Zend_View_Helper_Navigation_: Zend/View/Helper/Navigation/ Zend_View_Helper_: Zend/View/Helper/:./views/helpers/:/home/wheresrh/public_html/spz/application/views/helpers/' in /home/wheresrh/public_html/spz/library/Zend/Loader/PluginLoader.php:412 Stack trace: #0 /home/wheresrh/public_html/spz/library/Zend/View/Abstract.php(1173): Zend_Loader_PluginLoader->load('IncludeStyles') #1 /home/wheresrh/public_html/spz/library/Zend/View/Abstract.php(609): Zend_View_Abstract->_getPlugin('helper', 'includeStyles') #2 /home/wheresrh/public_html/spz/library/Zend/View/Abstract.php(336): Zend_View_Abstract->getHelper('includeStyles') #3 [internal function]: Zend_View_Abstract->__call('includeStyles', Array) #4 /home/wheresrh/public_html/spz/application/layouts/layout.phtml(19): Zend_View->includeStyles('full') #5 /home/wheresrh/public_html/spz/library/Zend/View.php(108): include('/h in /home/wheresrh/public_html/spz/library/Zend/Loader/PluginLoader.php on line 412`

Похоже, что автозагрузчик не в состояниивыберите каталог views / helpers в качестве местоположения для вспомогательных классов, хотя структура папок и начальная загрузка на сайтах разработки и разработки точно такие же.

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

Вот мой 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"
autoloaderNamespaces[] = "SPZ_"
resources.frontController.controllerDirectory = APPLICATION_PATH "/controllers"
resources.frontController.params.displayExceptions = 0
resources.layout.layoutPath = APPLICATION_PATH "/layouts/"
resources.db.adapter       = PDO_MySql
resources.db.params.host = localhost
resources.db.params.username = ******
resources.db.params.password = ******
resources.db.params.dbname = ******  

И мой загрузчик

<?php

class Bootstrap extends Zend_Application_Bootstrap_Bootstrap
{
    protected function _initAutoload()
    {
        $moduleLoader = new Zend_Application_Module_Autoloader(array(
            'namespace' => '', 
            'basePath'  => APPLICATION_PATH));

    }

    protected function _initViewHelpers()
    {
        $this->bootstrap('layout');
        $layout = $this->getResource('layout');
        $view = $layout->getView();
        $view->doctype('XHTML1_STRICT');
        $view->headMeta()->appendHttpEquiv('Content-Type', 'text/html;charset=utf-8');
        $view->headTitle()->setSeparator(' - ');
        $view->headTitle('Sum Puzzles');
        $view->addHelperPath(APPLICATION_PATH.'/views/helpers/');
    }


}

А вот мой index.php

<?php
error_reporting(E_ALL | E_STRICT);
// Define path to application directory
defined('APPLICATION_PATH')
    || define('APPLICATION_PATH', realpath(dirname(__FILE__) . '/../application'));

// Define application environment
defined('APPLICATION_ENV')
    || define('APPLICATION_ENV', (getenv('APPLICATION_ENV') ? getenv('APPLICATION_ENV') : 'production'));


// Ensure library/ is on include_path
set_include_path(implode(PATH_SEPARATOR, array(
    realpath(APPLICATION_PATH . '/../library'),
    get_include_path(),
)));

/** Zend_Application */
require_once 'Zend/Application.php';

// Create application, bootstrap, and run
$application = new Zend_Application(
    APPLICATION_ENV,
    APPLICATION_PATH . '/configs/application.ini'
);
$application->bootstrap()
            ->run();

Может быть, у меня есть несколько конфликтующих / избыточных строк в моих файлах начальной загрузки и конфигурации?

* edit Я сейчас пытаюсь скопировать на другой сервер и получаю похожие ошибки, так как каталог "views" не был установлен какместо для поиска скриптов вида.

Ответы [ 3 ]

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

Добавление другого ответа, так как это требует совершенно другой тактики.

По моему опыту, успех на одной платформе (например, на локальной машине разработчика WinXP) сопровождается сбоем на моей рабочей машине (например, в Linux)чувствительность к регистру результата в имени файла или имени класса.Windows позволяет ему скользить, так как пути в файловой системе нечувствительны к регистру, в то время как Linux призывает меня к моей небрежности.

В вашем случае, возможно?

Например, трассировка стека упоминаетпапка /home/wheresrh/public_html/spz/, но configs/application.ini добавляет autoloaderNamespace[] = "SPZ_"

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

Оказывается, что-то не так с моим FTP-клиентом, поэтому некоторые файлы были загружены не полностью.Новая загрузка исправила это.Просто моя удача решить это ПОСЛЕ предложения щедрости.

0 голосов
/ 29 сентября 2010

Нет ли конфликта между этими значениями:

  1. 'SPZ_', заданным в директиве appnamespace в application/config.ini
  2. "", представленной какПространство имен приложений в Bootstrap::_initAutoloader()

На первый взгляд не объясняется, почему вы наблюдаете разницу между средой разработки и производственной средой, но все, что влияет на загрузку / автозагрузку, кажется уместным.

...