0

次の構成でカスタム ビュー ヘルパーを正常に追加しました。

https://gist.github.com/webdevilopers/b22f7471fd2b8d60cdea#file-module-php

ビュー ヘルパーには、次の名前のカスタム変数がありますfoo

https://gist.github.com/webdevilopers/b22f7471fd2b8d60cdea#file-abstractformautocomplete-php

前述したように、ビュー ヘルパーを使用する要素が 1 つしかない限り、このセットアップは正常に機能します。

複数のフォーム要素を追加するとすぐに、setFooメソッドは 1 回だけ呼び出され、foo変数は次の要素全体で設定されたままになります。

https://gist.github.com/webdevilopers/b22f7471fd2b8d60cdea#file-autocompleteform-php

ZF2の共有サービスについて読みましたが、これはそのようなケースですか? どうすればこの動作を防ぐことができますか?

Zend Framework 2 ServiceManager の紹介

デフォルトでは、ServiceManager はすべてのサービスが共有されていると想定しますが、ここでブール値 false を指定して、新しいインスタンスを返す必要があることを示すことができます。

4

1 に答える 1

2

あなたは基本的にここであなた自身の質問に答えました。サービスはデフォルトで共有されるため、特に設定しない限り、ビュー ヘルパーの最初のインスタンスが後続の呼び出しで再利用されます。これを行うには、sharedパラメーターをビュー ヘルパー構成 (未テスト)に追加します。

public function getViewHelperConfig()
{
    return array(
        'invokables' => array(
            'formelement'                  => 'Application\Form\View\Helper\FormElement',
            'formautocompletehidden'       => 'Application\Form\View\Helper\FormAutocompleteHidden'
        ),
        'shared' => array(
            'formelement' => false,
            'formautocompletehidden' => false
        ),
    );
}

編集:コメントで述べたように、これは現在、ZF2 のバグのため、ビュー ヘルパーでは機能しません。

于 2014-06-25T12:55:01.027 に答える