【问题标题】:Zend autoloader not working on live siteZend 自动加载器无法在实时站点上运行
【发布时间】:2010-09-29 11:23:37
【问题描述】:

我刚刚将我的开发站点复制到实时服务器,使用新的数据库连接详细信息等更新了配置,但收到以下错误消息:

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`

所以看起来自动加载器无法将视图/帮助器目录作为帮助器类的位置,即使在实时和开发站点上的文件夹结构和引导程序完全相同。

还有什么可能会影响自动加载器查找帮助类的能力?

这是我的 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”目录尚未设置为查找视图脚本的位置。

【问题讨论】:

  • 您在哪里定义 APPLICATION_PATH 以及它定义为什么?
  • 我附上了我的 index.php 文件,其中定义了应用程序路径

标签: php zend-framework zend-autoloader


【解决方案1】:

添加另一个答案,因为它采取了完全不同的策略。

根据我的经验,在一个平台(如本地 WinXP 开发机器)上成功,然后在我的生产机器(如 Linux 机器)上失败是文件名或类名中的结果区分大小写。 Windows 允许它滑动,因为文件系统中的路径不区分大小写,而 Linux 则因为我的粗心大意而责备我。

在你的情况下,可能吗?

例如,堆栈跟踪提到了一个文件夹/home/wheresrh/public_html/spz/,但configs/application.ini 添加了一个autoloaderNamespace[] = "SPZ_"

【讨论】:

  • 不幸的是它们都是 windows 盒子
  • 等一下,你的文件夹布局是什么?您的index.php 文件似乎暗示了一个非常标准的应用程序布局,但似乎自动加载器正在public_html/spz 中寻找您的视图助手。这真的是您的视图助手所在的位置吗?
【解决方案2】:

原来我的 ftp 客户端有问题,所以有些文件上传不完整。一个新的上传解决了这个问题。在提供赏金之后,我很幸运能解决这个问题。

【讨论】:

  • 恭喜并考虑删除所有此帖子以避免堆栈溢出混乱:-)
【解决方案3】:

这些值之间是不是有冲突:

  1. 'SPZ_'appnamespace 指令中给出 application/config.ini
  2. "",作为Bootstrap::_initAutoloader() 中的appnamespace 提供

没有解释 - 乍一看 - 为什么您会观察到开发环境和生产环境之间的差异,但任何影响加载/自动加载的东西似乎都可能是相关的。

【讨论】:

  • 我已经摆脱了这个冲突,它没有任何区别
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-06-16
  • 1970-01-01
相关资源
最近更新 更多