1

なぜこれが機能しないのかについて、私の髪を引っ張っています。たとえば、Zend docs、ここのいくつかの投稿、および雑多なブログにあるコントローラー アクション ヘルパーを登録しようとしています。application.ini と Bootstrap の両方で試行が行われました。

ヘルパー自体は APPLICATION_PATH にあります。「/コントローラー/ヘルパー」。ファイル自体は Scoping.php と呼ばれます。application.ini で、appnamespace = ""。

<?php
class Helper_Scoping extends Zend_Controller_Action_Helper_Abstract
{
    public function direct()
    {
       // code is here
    }
 }

最初にapplication.iniで試しました:

resources.frontController.actionhelperpaths.Helper = APPLICATION_PATH "/controllers/helpers"
resources.frontController.plugins.Scoping = "Helper_Scoping"

コントローラーで次を呼び出すと、「Action Helper by name Scoping not found」というメッセージとともに例外がスローされます。

$this->_helper->Scoping();

次に、Bootstrap で次のことを試しました (私が見た他の例に基づいて、「Helper」と「Helper_」の両方を試しました)。

protected function _initActionHelpers()
{
    Zend_Controller_Action_HelperBroker::addPath(
            APPLICATION_PATH . '/controllers/helpers', 
            'Helper_'
    );
    Zend_Controller_Action_HelperBroker::addHelper(
        new Helper_Scoping()
    );
}

今回はキャッチされない例外が発生しますが、同じ考えです:「致命的なエラー: 116 行目の /Users/ppjd/Sites/dbos/application/Bootstrap.php にクラス 'Helper_Scoping' が見つかりません」

非常に多くの実用的な例があるので、何かばかげたことを見逃しているに違いないと思います。SOSください。

4

2 に答える 2

0

誰かがこれに遭遇した場合、最終的に私にとってうまくいったのは次のとおりです。それは名前空間の問題でした。Bootstrap では、addHelper の前に次の変更を行いました。

    $rl = $this->getResourceLoader();
    $rl->addResourceTypes(array(
        // ...other namespace settings...
        'helper' => array(
                'path'      => 'controllers/helpers',
                'namespace' => 'Helper',
        ),
    ));

その後、すべてがうまくいきました。これが他の誰かに役立つことを願っています。

[実際のアプリケーション開発よりも、フレームワークの仕上げに多くの時間を費やしているように感じることがあります。]

于 2012-11-13T17:29:39.170 に答える
0

私はこれを試していませんが、ヘルパー クラス (アプリケーション構造内: APPLICATION_PATH . "/controllers/helpers) は、'Helper_Scoping' ではなく 'Zend_Controller_Action_Helper_Scoping' であるべきだと思います。

于 2012-11-11T10:20:18.477 に答える