J'utilise Zend \ Form \ Factory pour créer des formulaires dans Zend Framewrad2 Vous pouvez voir qu'il existe des filtres et des validateurs pour le champ "Nom". Ça marche.
J'ai le problème si j'utilise des champs: p> dans cet exemple de filtre d'entrée ne fonctionne pas. Je ne sais pas comment définir des filtres et des validateurs sur le champ "Nom" dans champset "commun" p> Cet exemple ne fonctionne pas aussi: P> $factory->createForm(array(
'fieldsets' => array(
array(
'spec' => array(
'name' => 'common',
'elements' => array(
array(
'spec' => array(
'name' => 'name',
),
),
),
'input_filter' => array(
'name' => array(
'validators' => array(
// validators for field "name"
),
'filters' => array(
// filters for field "name"
),
),
),
),
),
),
));
3 Réponses :
Vous avez que votre syntaxe est incorrecte, sont courantes et spécifiques sont censées être nichées de tableau ou quelque chose? Je ne sais pas ce que vous faites là-bas ... Essayez de supprimer la partie SPEC
$factory = new Factory(); $form = $factory->createForm(array( 'fieldsets' => array( array( 'name' => 'details', /** * Elements for the "details" form */ 'elements' => array( array( 'name' => 'name', 'type' => 'Text', 'options' => array( 'label' => 'Full name', ), ), array( 'type' => 'Zend\Form\Element\Email', 'name' => 'email', 'options' => array( 'label' => 'Email address', ), ), ), ), array( 'name' => 'extra', 'elements' => array( array( 'name' => 'address', 'type' => 'Text', 'options' => array( 'label' => 'Address', ), ), array( 'name' => 'notes', 'type' => 'Zend\Form\Element\Textarea', 'options' => array( 'label' => 'Notes', ), ), ), ), ), /** * Elements on the form itself, not in the fieldsset */ 'elements' => array( array( 'type' => 'Zend\Form\Element\Captcha', 'name' => 'captcha', 'options' => array( 'captcha' => array( 'class' => 'Dumb', ), ), ), array( 'type' => 'Zend\Form\Element\Csrf', 'name' => 'security', ), array( 'name' => 'send', 'type' => 'Submit', 'attributes' => array( 'value' => 'Submit', ), ), ), /*/ * Input Filters Spec here */ 'input_filter' => array( 'name' => array( 'validators' => array( // validators for field "name" ), 'filters' => array( // filters for field "name" ), ), ), ));
Ma syntaxe est correcte, je l'ai vérifiée. Commun est juste un nom de champique. L'indice "commun" dans la matrice Fielsets était juste pour moi, pour un accès facile, j'ai déjà supprimé l'indice "commun" de Post. SPEC est requis, sans cela, je reçois une exception "Zend \ Form \ Tableau :: Ajouter: élément ou champique fourni n'est pas nommé, et aucun nom fourni dans le drapeau". Donc, votre code est incorrect
Mon code est incorrect? C'est drôle que c'est directement auprès des documents, SPEC n'est pas requis.
Je pense que c'est une erreur de documentation. Exemple ne fonctionne vraiment pas. Github.com/zendframework/zf2/issues/2561
Vous devez spécifier la touche "Type" dans le filtre de saisie lorsque vous avez utilisé des champs d'utilisation.
Je ne pense pas que les "validateurs" => array (// validateurs pour le champ "Nom" New \ Zend \ validator \ e-mailAddress (), fonctionnent ... Parce que le validateur demande la valeur de la clé Pare de tableau et donne cette erreur "Spécification du validateur non valide fournie; n'inclut pas" Nom "clé" .. toute solution?
Si vous souhaitez ajouter des validateurs dynamiques dans l'action (par exemple, des validateurs requis uniquement lorsque certains autres champs ont une valeur spécifique), il s'agit d'un énorme puzzle d'appliquer cela lors de l'utilisation de la collection de formulaires.
Afin de Atteindre cela, vous devez saisir la chaîne de validateur de l'élément spécifique. Pour chaque champ de bord, vous devez d'abord accrocher son propre filtre d'entrée. Je voudrais partager cela, car cela m'a pris 2 heures pour comprendre;) p>
Disons que vous avez une forme de base, le formulaire de base a un champique et que les champs ont des éléments x-éléments. Le code pour ajouter un validateur à l'un des éléments X nécessite une chaîne suivante: p> x x getinputfilter () code> peut vous donner un mal de tête. p> p>
Définissez les validateurs et les spécifications de filtrage à l'intérieur de la spécification de champs d'accès correspondant, non sur la spécification de formulaire de niveau supérieur.
J'ai essayé de faire ça, mais ça ne marche pas aussi. (Question mise à jour) ZF2 2.1.5
Hmm ... Je ne peux pas le tester pour le moment, mais je soupçonne que vous avez besoin d'un
'Name' => 'Nom', Code> Paire de la clé / Valeur à l'intérieur de votre principale touche "Nom". Je vais essayer de vérifier.