私はローカルホスト (OS: 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が必要なときに使用します(レイアウトだけでなく、ビューでも)。アプリケーションの「デフォルト」モジュールと「管理」モジュール (modules/admin/...) で同じヘルパーを使用しています。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() に変更すると、すべてが (オンラインとローカルで) 機能します。
誰かが私が欠けているものを教えてくれるなら、感謝します。
PS: 私の頭ではまだはっきりしていないので、誰かが教えてくれるかもしれません: モジュールで宣言されたヘルパーは、ウェブサイトのすべてのモジュールで利用可能ですか? (ローカル開発は、ローカルで動作しているため、そうであると私に言いましたが、アップロードされたプロジェクトの何が問題なのですか?)。
ありがとう。