0

注: これは古い質問であり、ここでの回答は機能しなくなりました (ベータ 5 以降)。ZF2安定版でそれを行う方法については、この質問を参照してください。

マニュアルからこの例を見てきました。これは Zend Framework のバージョン 2 であることに注意してください。

私はこのヘルパーを作成します:

<?php
namespace Mats\Helper;    
use Zend\View\Helper\AbstractHelper;    
class SpecialPurpose extends AbstractHelper
{
    protected $count = 0;    
    public function __invoke()
    {
        $this->count++;
        $output = sprintf("I have seen 'The Jerk' %d time(s).", $this->count);
        return htmlspecialchars($output, ENT_QUOTES, 'UTF-8');
    }
}
?>

そして、次のように登録してみてください:

return array(
    'di' => array('instance' => array(
        'Zend\View\HelperLoader' => array('parameters' => array(
            'map' => array(
                'specialpurpose' => 'Mats\Helper\SpecialPurpose',
            ),
        )),
    )),
);

ただし、ビューでこれを行う場合、たとえば add.phtml

<?php echo $this->specialPurpose(); ?>

ヘルパーが見つからないと言ってクラッシュします。

ただし、同じ add.phtml ファイルで実行できます

<?php $helper = new Mats\Helper\SpecialPurpose(); ?>

それにアクセスできるので、名前空間は正しいはずですか?

現在は Module.php に登録していますが、他の場所でも試しました。

私の目標は、モジュール内のすべてのビューでビュー ヘルパーにアクセスできるようにすることです。各 phtml ファイルでビュー ヘルパーのインスタンスを作成したり、コントローラーに毎回追加したりする必要はありません。

これはどのように達成できますか?ありがとう。

4

2 に答える 2

3

カスタム ヘルパーの追加は非常に簡単です。次のようにモジュール構成ファイルに 1 行追加するだけです。

return array(
    'view_manager' => array(
        'helper_map' => array(
            'specialPurpose' => 'Mats\Helper\SpecialPurpose',
        ),
    ),
);
于 2012-06-17T15:26:05.937 に答える
3

ZF2 は、プログラマティック ファクトリを持つサービス マネージャに移動しましたが、di はフォールバック ファクトリとして使用されていました。

ビューには現在ビュー マネージャーがあり、サービスの解決がファクトリを見つけるとすぐに停止するため、di を介して構成されたヘルパーは機能しなくなります。

ヘルパーを登録する方法の例は、 ZfcUser モジュール構成で見つけることができます

于 2012-06-16T15:28:10.193 に答える