2013-05-17 8 views
9

ZF2ドキュメントには、defult services documentationの後に続くと書かれています。InputFilterManagerを使用してZf2でカスタムInputFiltersを構築する方法

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), 
       ), 
     )); 
} 

はまた、私は

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

私module.config.phpに次のキーを追加しました私の質問は、どのように私はInputFilterManagerを使用して、私のGlassFilterを構築することができますか?これは正しいアプローチですか? this threadが見つかりましたが、私はカスタムInputFiltersとInputFilterManagerの関係を理解し​​たいと思います。

+0

イム間違っていない場合は、限り、あなたはそれを登録すると、それは '配列( '名前' =のように単純でなければなりません> 'glassfilter') ''フィルター 'キーの下に – Sam

答えて

29

私はそれを理解しました。私は答えとして私の解決策を書いています。うまくいけば、彼らは自分のカスタム入力フィルタを書こうと思っている人たちを助けるでしょう。

  1. 独自のGlassFilterを書くときに、デフォルトZend\InputFilter\InputFilterを拡張input_filters filtermanagerなどトップキーではなく、フィルタ、フィルタ、filter_manger ..
  2. によってmodule.config.phpにカスタムinputfilterをあなたを登録する必要があります。
  3. __constructor()ではなく、init()メソッドをGlassFilterに書き込んでください。建設後に自動的に呼び出されます。
  4. その後、inputfiltermanagerでどこでも入手できますが、servicemanagerではなく直接取得してください。

コンフィグ例:

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

使用例:

$glassfilter = $serviceLocator->get('InputFilterManager')->get('glassfilter'); 
+2

+1ありがとうございます。 '1 'については' Module.php'の 'Zend \ ModuleManager \ Feature \ FilterProviderInterface' /' getFilterConfig() 'を使うこともできます。 – AlexP

+0

ありがとうございます。私の場合、 'init()'関数はトリガされていませんでした。これはそれを機能させた。 – kabirbaidhya

関連する問題