9

ZF2 のドキュメントには、デフォルト サービスのドキュメントに続くと記載されています。

Zend\Mvc\Service\InputFilterManagerFactory にマッピングする InputFilterManager。これは、Zend\InputFilter\InputFilterPluginManager のインスタンスを作成して返します。これを使用して、入力フィルタ インスタンスを管理および永続化できます。

カスタム zf2 inputfilter クラスがあり、次のように init() メソッド内にフィルターとバリデーターを追加しています。

namespace Application\Filter;
use Zend\InputFilter\InputFilter;

class GlassFilter extends InputFilter
{
    public function init()
    {
        $this->add(array(
                'name' => 'glassname',
                'required' => true,
                'filters' => array(
                    array('name' => 'StringToUpper'),
                ),
                'validators' => array(
                    array( 'name' => 'StringLength', 'options' => array('min' => 3),
                ),
        ));
}

また、次のキーをmodule.config.phpに追加しました

'filters' => array(
    'invokables' => array(
        'glassfilter' => '\Application\Filter\GlassFilter',
    ),
),

私の質問は、InputFilterManagerを使用してGlassFilterを構築するにはどうすればよいですか? これは正しいアプローチですか?このスレッドを見つけましたが、カスタム InputFilters と InputFilterManager の関係を理解し​​たいです。

4

1 に答える 1

30

わかりました、3 時間費やした後 (信じられないほどの (!) ドキュメントのおかげで) 私はそれを理解しました。私は答えとして自分のソリューションを書いています。カスタム入力フィルターを書きたい他の人に役立つことを願っています。

  1. filter、filters、filter_manger、filtermanager などではなく、input_filters トップ キーでmodule.config.phpカスタムinputfilterを登録する必要があります。
  2. 独自Zend\InputFilter\InputFilterGlassFilter.
  3. ではなく、のinit()メソッド内にフィルタを記述します。構築後に自動的に呼び出されます。GlassFilter__constructor()
  4. inputfiltermanager次に、直接ではなく、経由でどこにでも取得しますservicemanager

設定例:

'input_filters' => array(
    'invokables' => array(
        'glassfilter' => '\Application\Filter\GlassFilter',
     ),
),

使用例:

$glassfilter = $serviceLocator->get('InputFilterManager')->get('glassfilter');
于 2013-05-17T11:31:17.353 に答える