2016-07-28 24 views
0

können keine benutzerdefinierten Prüfprogramme in ZF2 verwendet werden. Ich frage mich, ob dieses Problem schon einmal bei jemandem aufgetreten ist. Ich bin mit der vorkonfigurierten Form spec das Zend \ Formular \ Fabrik erstellen Formular, ich bin auch die FormElementManager in die Fabrik eingespritzt, so dass es meine benutzerdefinierten Elemente usw. findetBeim Erstellen eines Formulars mit Factory

Meine Frage ist:

Selbst Wenn benutzerdefinierte Validatoren mit dem Formular registriert sind, lösen sie keine isValid() -Methode aus. Gibt es etwas, was ich tun muss, um die isValid() ausgelöst mit dem Erstellen des Formulars mit Factory zu bekommen.

Meine Quelle sieht wie folgt aus:

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



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

Aber wenn ich auslösen:

$form->isValid() 

Es ist nicht in meiner benutzerdefinierten Validator zum isValid Anruf erhalten.

Antwort

0

Die input filter factory, Zend\InputFilter\Factory, is another dependency of the form factory. Diese Factory wird von der Formularfabrik verwendet, um die Eingaben zu erstellen, die gefiltert und validiert werden sollen.

Um die neuen Eingänge zu erstellen und die benutzerdefinierten Filter und Validatoren anzuhängen, verwendet die Eingangsfactory die Zend\InputFilter\InputFilterPluginManager, die in also seeds the two other plugin managers, the FilterManager and the ValidatorManager enthalten ist.

Die Zend\Validator\ValidatorPluginManager ist der Plugin-Manager, der Ihren benutzerdefinierten Validator erstellen würde.

Also durch Aktualisierung Ihres Codes und manuelle Einstellung dieser Abhängigkeit würde dann die benutzerdefinierten Validatoren über die Zend\InputFilter\Factory gefunden werden können.

$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

Danke Alex, für Ihren Kommentar. –

+0

Das Problem war nicht nur das. Grundsätzlich werden alle zf2-Formularelemente, die nicht benötigt werden, nicht die Validatoren in der Validierungskette aufrufen, was zu dem Problem führt, dem ich gegenüberstehe. Meine Lösung bestand darin, den Not_Empty-Validator hinzuzufügen, wenn die Eingabe nicht erforderlich war und alle Validatoren einschließlich meines benutzerdefinierten Validators ausgelöst wurden. Siehe: https://akrabat.com/category/zend-framework-2/ –