2

カスタム ビュー ヘルパーの登録方法に関する多くの投稿を読みました。これは私の問題ではありません。ライブラリから動作するカスタム ビュー ヘルパーがあります。ただし、それらは「デフォルト」モジュール (つまり、モジュールの外) からしかアクセスできないようです。モジュール内からヘルパーを呼び出そうとすると、次のエラーが発生します。

Message: Plugin by name 'IsCurrent' was not found in the registry; used paths: Zend_View_Helper_: Zend/View/Helper/:/Users/firemanrob/Development/Projects/mysite.com/www/application/modules/admin/views/helpers/

上記のように、モジュールの外部からこの呼び出しを行うと、正常に動作します...

if ($this->isCurrent(...

しかし、モジュール内のビュー スクリプト内の同じ行でエラーが発生します。

私のヘルパークラスは、というファイルにあります

library/Sc/View/Helper/IsCurrent.php

クラスが定義され、関数が次のように宣言されます。

class Sc_View_Helper_IsCurrent extends Zend_View_Helper_Abstract {

public function isCurrent($startTime, $endTime) {

私のBootstrap.phpファイル(とりわけ)にはこれが含まれています:

function _initViewHelpers() {
    $this->bootstrap('layout');
    $layout = $this->getResource('layout');
    $viewRenderer = Zend_Controller_Action_HelperBroker::getStaticHelper('viewRenderer');
    $viewRenderer->setViewSuffix('php');
    unset($viewRenderer);
    /* @var $view Zend_View */
    $view = $layout->getView();
    $options = Zend_Registry::get('options');

    if (Zend_Registry::isRegistered('db')) {
        $this->_db = Zend_Registry::get('db');
    } else {
        $db = $this->getPluginResource('db');
        $this->_db = Zend_Db::factory($db->getAdapter(), $db->getParams());
        Zend_Registry::set('db', $this->_db);
    }

    $view->doctype('HTML5');
    $view->headMeta()->appendHttpEquiv('Content-Type', 'text/html;charset=utf-8');
    $view->headTitle($options->template->websiteBaseTitle);
    $view->headTitle()->setSeparator(' | ');
    $view->addHelperPath("Sc/View/Helper", "Sc_View_Helper");

}

モジュールまたはビュー ヘルパーに関連して、私の application.ini ファイルに含まれる唯一のものは次のとおりです。

includePaths.library = APPLICATION_PATH "/../library"
bootstrap.path = APPLICATION_PATH "/Bootstrap.php"
bootstrap.class = "Bootstrap"
resources.frontController.controllerDirectory = APPLICATION_PATH "/controllers"
resources.frontController.params.displayExceptions = 0

; setup modules

resources.modules[] =
resources.frontController.moduleDirectory = APPLICATION_PATH "/modules"

;content settings
content.path = "../application/content"

;layout settings

resources.layout.layoutpath = APPLICATION_PATH "/layouts"
resources.layout.viewSuffix = php
resources.layout.layout = "default"

autoloadernamespaces[] = Amg
autoloadernamespaces[] = Sc
autoloadernamespaces[] = Phpmailer

別の投稿で同様のことを読んだので、resources.modules[] 行をコメントアウトしてみました。それはちょうどすべてを壊しました。

これを呼び出そうとしている特定のモジュールは「admin」と呼ばれ、そのモジュールのフォルダーには、次のみを含む別の Bootstrap.php ファイルがあります。

<?php
class Admin_Bootstrap extends Zend_Application_Module_Bootstrap
{
}

この作業ビュー ヘルパーをモジュールからも見えるようにする方法について何か提案はありますか?

4

2 に答える 2

2

これは少し長いショットですが、現在使用している 3 つのビュー レンダラー行をコメント アウトして、_initViewHelpers()代わりに関数の最後に次を追加してみてください。

$viewRenderer = new Zend_Controller_Action_Helper_ViewRenderer($view);
$viewRenderer->setViewSuffix('php');
$stack = Zend_Controller_Action_HelperBroker::getStack();
$stack->push($viewRenderer);

$viewこれにより、構成しているオブジェクトが、ビュー レンダラーが使用するものであることが保証されます。あなたのヘルパー パスは、あなたが得ているエラーに含まれていません。これは、これが別のビュー オブジェクトから来ていることを示唆しています。

デフォルトのモジュールでは機能するが、管理モジュールでは機能しない理由については説明がありません。レイアウト内からは機能するが、ビュー スクリプトからは機能しない場合は、もう少し意味があるかもしれません。

于 2013-08-06T21:36:07.077 に答える
1

ビューヘルパーに相対ファイルパスを使用しているようです-これは、他のモジュールではビューヘルパーへの相対パスを変更するときとは異なるため、デフォルトモジュールでは機能するが他のモジュールでは機能しない理由を説明できますモジュールで。次のようなものを試してください$view->addHelperPath("/ABSOLUTE/PATH/TO/library/Sc/View/Helper", "Sc_View_Helper");

于 2013-08-06T15:59:20.230 に答える