2016-07-28 5 views
0

これまでにこの問題を抱えている人がいるかと思いました。 それは私のカスタム要素を見つけることができますので、私はZendの\フォーム\ファクトリーを使用してフォームを作成するために、事前設定されたフォームの仕様を使用しています、私はまた、工場出荷時にFormElementManagerを注入していますなどファクトリを使用してフォームを作成するときにZF2でカスタムバリデータを使用できません

私の質問は次のとおりです。でも

任意のカスタムバリデーターはフォームに登録されており、isValid()メソッドはトリガーされません。ファクトリを使用してフォームを作成することによってトリガされたisValid()を取得するために必要なことはありますか。

$spec = [ 
    'hydrator' => '...', 
    'fieldset' => [ 
     ..., 
     ..., 
     ..., 
    ], 
    'input_filter' => [ 
     ..., 
     .... 
     ...., 
     //contains my custom validator in here 
    ], 
]; 



$factory = new Factory(); 
$factory->setFormElementManager($formElementManager); 
$form = $factory->createForm($spec); 

しかし、私はトリガー:

$form->isValid() 

それは私のカスタムバリデータではisValidコールに取得していません

私の元には、次のようになります。

答えて

0

input filter factory, Zend\InputFilter\Factory, is another dependency of the form factory。このファクトリは、フォームファクトリによってフィルタリングおよび検証される入力を作成するために使用されます。

新しい入力を作成し、カスタムフィルタとバリデータを添付するには、Zend\InputFilter\InputFilterPluginManageralso seeds the two other plugin managers, the FilterManager and the ValidatorManagerの内部)を使用します。

Zend\Validator\ValidatorPluginManagerは、カスタムバリデーターを作成するプラグインマネージャーです。

コードを更新してこの依存関係を手動で設定すると、Zend\InputFilter\Factoryでカスタムバリデーターを見つけることができます。

$formElementManager = $serviceManager->get('FormElementManager'); 
$inputFilterManager = $serviceManager->get('InputFilterManager'); 

$inputFilterFactory = new Zend\InputFilter\Factory(); 
$inputFilterFactory->setInputFilterManager($inputFilterManager); 

$formFactory = new \Zend\Form\Factory(); 

$formFactory->setFormElementManager($formElementManager); 
$formFactory->setInputFilterFactory($inputFilterFactory); 

$form = $formFactory->createForm($spec); 
+0

ありがとうございました。 –

+0

問題はそれだけではありませんでした。基本的に必要でないzf2フォーム要素は、バリデータチェーン内のバリデータを呼び出さないため、問題が発生しています。私の解決策は、入力が不要なときにNot_Emptyバリデータを基本的に追加することでした。カスタムバリデータを含むすべてのバリデータがトリガされました。参照:https://akrabat.com/category/zend-framework-2/ –

関連する問題