0

zend Framework 2.02にカスタムビューヘルパーを登録できないようです。ここに投稿されているすべてのソリューションと、実行すべきと思われるすべてのソリューションを試しましたが、次のエラーが発生し続けます。

致命的なエラー:177行目のC:\ wamp \ vhosts \ projectName \ vendor \ zendframework \ zendframework \ library \ Zend \ ServiceManager\AbstractPluginManager.phpにクラス'ModuleName\ view \ Helper\mylinkhelper'が見つかりません

そして、これが私のmodule.config.phpがどのように見えるかです:

return array{
      'controllers'=>array(

           ....
       ),
      'view_manager' => array(
          'template_path_stack' => array(
             'ModuleName' => __DIR__ . '/../view',
           ),    
   ),
   'view_helpers' => array(  
            'invokables' => array(  
                 'mylink' => 'ModuleName\view\Helper\mylinkhelper',   
             ),  
       ),
};

ビューファイルには、次のものがあります。

echo $this->mylink($someparameter); 

これに関するフィードバックに感謝します。ここで他に何をすべきか本当にわかりません。

4

5 に答える 5

0

ServiceManager呼び出し元mylink()がを作成しようとしているため、ViewHelperが正しく追加されているようModuleName\view\Helper\mylinkhelperです。

クラスがnew College\view\Helper\mylinkhelper();コントローラーから作成可能であることを確認します。これにより、いくつかの手がかりが得られる可能性があります。また、ファイル名とクラス名が正しいことを確認してください。

于 2012-10-02T09:00:12.950 に答える
0

あなたのアプローチは正しいですが、この問題を引き起こす2つのことがあるかもしれません:

  1. トップレベルの名前空間について話ModuleNameしますが、構成例ではトップレベルの名前空間がありますCollege。名前空間があり、ModuleNameロードしようとするとCollege、明らかに機能しません

  2. ビューヘルパーを自動ロードすることはできません。クラス名が正しい(MyLinkHelper)、名前空間が正しい(College\View\Helper、上記も参照)、ファイル名が正しい(MyLinkHelper.php)かどうかを確認してください。また、モジュールクラスでこのモジュールのクラス名の自動読み込みを有効にしましたか?

3番目のオプションは、小文字の「view」と「mylinkhelper」で、通常はCollege\View\Helper\MyLinkHelper大文字のV、M、L、Hで記述します。ただし、Windowsを使用しているため、問題ありません。Linuxの場合、クラス名の大文字と小文字の区別に注意する必要があることを私は知っています。

于 2012-10-02T13:11:21.810 に答える
0
<?php
// ./module/Application/src/Application/View/Helper/AbsoluteUrl.php
namespace Application\View\Helper;

use Zend\Http\Request;
use Zend\View\Helper\AbstractHelper;

class AbsoluteUrl extends AbstractHelper
{
    protected $request;

    public function __construct(Request $request)
    {
        $this->request = $request;
    }

    public function __invoke()
    {
        return $this->request->getUri()->normalize();
    }
}

この特定のヘルパーには依存関係(Zend \ Http \ Requestオブジェクト)があることに気付くでしょう。これを注入するには、ビューヘルパーの初期化ロジックを使用してファクトリを設定する必要があります。

    <?php
    // ./module/Application/Module.php
    namespace Application;

    use Application\View\Helper\AbsoluteUrl;

    class Module
    {
        public function getViewHelperConfig()
        {
            return array(
                'factories' => array(
                    // the array key here is the name you will call the view helper by in your view scripts
                    'absoluteUrl' => function($sm) {
                        $locator = $sm->getServiceLocator(); // $sm is the view helper manager, so we need to fetch the main service manager
                        return new AbsoluteUrl($locator->get('Request'));
                    },
                ),
            );
        }


     // If copy/pasting this example, you'll also need the getAutoloaderConfig() method; I've omitted it for the sake of brevity.
}

それでおしまい!これで、ビュースクリプトでヘルパーを呼び出すことができます。

現在のページへの完全なURLは次のとおりです。<?php echo $this->absoluteUrl(); ?>

このチュートリアルを作成してくれたevanに感謝します

于 2012-11-05T18:28:20.757 に答える
0

問題は、クラスファイルがロードされていないことです。autoload_classmap.phpに含まれているはずです。

<?php
return array(
    '{module}\View\Helper\{helper}' => __DIR__ . '\View\Helper\{helper}.php',
);
?>

私は同じ問題で実行しました、そしてこのページは私を助けました。

私はZFを初めて使用するため、autoload_classmapにパスを追加する別の方法があるかどうかわかりません。おそらくあると思いますが、ファイルを手動で編集しただけです。

于 2012-12-09T02:10:12.223 に答える
-1

同じ問題が発生しました。ビューヘルパーファイルが含まれていないことが自分でわかりました。それをテストするためにコントローラーに入れている間、それは機能しました

例えば:require_once('module/Pages/view/Helper/RenderNav.php');

なぜ自動ロードされていないのですか?

于 2012-11-05T18:05:37.283 に答える