【问题标题】:Zend View Helper strange issueZend View Helper 奇怪的问题
【发布时间】:2011-03-19 05:52:21
【问题描述】:

我一直在 localhost(操作系统:Snow Leopard)上开发一个 zend 框架项目,当我将文件上传到托管服务器(共享托管)上时,我遇到了一些关于我在那里使用的视图助手的错误。

更具体地说:
项目结构是这样的:(我省略了一些不相关的子文件夹,括号中的数字仅供参考,不包含在项目中的文件夹名称中)

application
-configs
-controllers
-layouts
--scripts
-models
-modules
--admin
---controllers
---models
---views(2)
----filters
----helpers(2)
----scripts
-views(1)
--helpers(1)
--scripts
library
public

在 helpers(1) 文件夹中,我有一个视图助手 BaseURL.php:

class Zend_View_Helper_BaseURL
{
    function baseURL()
    {
        $fc = Zend_Controller_Front::getInstance();
        return $fc->getBaseUrl();
    }
}

例如,我在布局中使用它来为 CSS 文件、JS 文件等内容编写路径:

<script src="<?php echo $this->baseURL();?>/public/js/somejavascript.js></script>

通常我在需要基本 url 时使用它(不仅在布局中,也在视图中)。我一直在应用程序的“默认”模块和“管理”模块(模块/管理/...)中使用相同的助手。 Localy,一切顺利,没有问题。 当我上传项目时,出现如下错误:

An error occurred
Application error
Exception information:

Message: Plugin by name 'BaseURL' was not found in the registry; used paths: Cmsadmin_View_Helper_: /path_to_site_like_public_html/application/modules/cmsadmin/views/helpers/ Zend_View_Helper_: Zend/View/Helper/

上面的错误是针对在管理布局(在管理模块中调用)中使用 $this->baseURL() 的行。

起初我想可能是因为助手是在另一个模块(默认模块)中声明的,它在管理模块中的框架中找不到。但为什么本地一切正常?我不明白。 另外,如果我在同一个 admin.phtml 布局文件中将 $this->baseURL() 更改为 $this->baseUrl(),则在管理模块中,一切正常(在线和本地)。

如果有人能告诉我我缺少什么,我将不胜感激。

P.S.:由于我还不清楚,也许有人可以告诉我:在模块中声明的助手在网站的所有模块中都可用? (本地开发人员告诉我它是,因为它在本地工作,但是上传的项目有什么问题?)。

谢谢。

【问题讨论】:

    标签: zend-framework view helper base-url


    【解决方案1】:

    您需要在视图助手前面加上Cmsadmin_View_Helper_ 而不是Zend_View_Helper_,如错误消息中所述。错误消息告诉它在哪些路径中查找各种前缀。

    【讨论】:

    • 我想提两件事: 1. 我在 cmsadmin 模块中有一个助手,它的名字是 AdminBaseURL.php ,代码是: class Zend_View_Helper_AdminBaseURL { function adminBaseURL() { $fc = Zend_Controller_Front::getInstance();返回 $fc->getBaseUrl()."cmsadmin/"; } } 和 2. 仍然,为什么当我在现在的状态下使用 baseUrl() 而不是 baseURL() 时它会起作用?
    • P.S.还有第三件事要提到:我在同一个文件夹中还有另一个名为 class Zend_View_Helper_MediaDir 的助手: cmsadmin/views/helpers ,并且这个助手没有任何问题。
    【解决方案2】:

    检查一下

    $this->baseUrl('');

    保持参数为空可能会解决问题。 您将在布局和 default.php 中获得 baseurl。

    【讨论】:

      【解决方案3】:

      替换这个:-

      <script src="<?php echo $this->baseURL();?>/public/js/somejavascript.js></script>
      

      与:

      <script src="<?php echo $this->baseUrl();?>/public/js/somejavascript.js></script>
      

      不:- 始终使用$this-&gt;baseUrl(); 区分大小写

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-01-31
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多