Les formulaires
Venus permet de créer des formulaires dynamiques directement à partir du controller :$oForm = $this->form ->add('name', 'text') ->add('validate', 'submit') ->synchronizeEntity('Venus\src\Helium\Entity\merchant') ->getForm();On va créer un formulaire en ajoutant un champ texte et un bouton submit. Ensuite on indique l’entité qui doit se synchroniser avec le formulaire (sachant que les champs doivent avoir le nom des colonnes de la table).
Si vous ajoutez un champ caché avec la clé primaire de la table, l’update sera automatique.
Le getForm() permet de récupérer un conteneur qui propose différentes méthodes utiles pour afficher le formulaire final ou réaliser d’autres opération.
Dans l'ajout d'un champ, vous pouvez ajouter un label comme ceci :
->add('name', 'text', 'mon label')Dans l'ajout d'un champ, vous pouvez également ajouter une valeur par défaut :
->add('name', 'text', 'mon label', 'DEFAULT')Pour proposer un formulaire qui remplit automatiquement celui-ci afin de faire un update, il suffit de rajouter l’id de la clé primaire désirée dans le synchronizeEntity :
$sForm = $this->form ->add('name', 'text') ->add('validate', 'submit') ->synchronizeEntity('Venus\src\Helium\Entity\merchant', 12) ->getForm();Pour faire une lsite de sélection où $aFinalMerchant est un tableau de type array(id => name), nosu écriroons ceci :
$oForm = $this->form ->add('name', 'text', 'Name') ->add('id_merchant', 'select', 'Merchants', null, $aFinalMerchant) ->add('validate', 'submit') ->synchronizeEntity('Venus\src\Helium\Entity\user') ->getForm();Exemple de formulaire avec une liste de champs à cocher directement créés par le framework avec le même tableau :
$oForm = $this->form ->add('name', 'text', 'Name') ->add('id_merchant', 'checkbox', 'Merchants', null, $aFinalMerchant) ->add('validate', 'submit') ->synchronizeEntity('Venus\src\Helium\Entity\user') ->getForm();Le conteneur retourné par la fonction getForm() propose par exemple d’afficher le formulaire final en une seule variable. Voici un exemple dans un contrôleur et dans un template :
$this->view->assign(‘form’, $oForm->createView()); # dasn le controleur (et) {$form->form} # dans le templatePour sauvegarder le résultat, il faudra ajouter un $form->handleRequest(). Le synchronizeEntity() n’est pas obligatoire pour valider un formulaire. Par contre si vous faites un synchronizeEntity, le résultat ne s’enregistrera qu’après avoir fait le $form->handleRequest() :
$oForm = $this->form ->add('Mon Label', 'label') ->add('id_merchant', 'select', 'Merchants', null, $aFinalMerchant) ->add('validate', 'submit') ->synchronizeEntity('Venus\src\Helium\Entity\user') ->getForm(); $oForm->handleRequest(); If ($oForm->isValid()) { /*résultats */ }Vous pouvez aussi tester si le formulaire a été soumis (sans en tester la validité) en utilisant la méthode $oForm->isSubmitted().
Vous pouvez tester le bouton submit qui a été cliqué (quand vous en mettez plusieurs) avec la méthode $oForm->isClicked(‘bouton_valid1’) ;
Dans les templates, vous pouvez écrire tout le formulaire vous-même comme ceci :
{$form->form_start} {$form->form_row[‘name’]} {$form->form_row[‘firstname’]} {$form->form_end}Pour renforcer la sécurité des formulaires, vous pouvez rajouter des contraintes.
Venus 2 permet de faire des formulaires imbriqués comme ceci :
$oForm = $this->form ->add('Utilisateur', 'label') ->add('id_user', 'select', 'Users', null, $aUser) ->synchronizeEntity('Venus\src\Helium\Entity\user') ->getForm(); $oFinalForm = new \Venus\lib\Form; $oForm2 = $oFinalForm->add('title_group', 'input', ‘Title Group’) ->add('users', $oForm) ->add('validate', 'submit') ->synchronizeEntity('Venus\src\Helium\Entity\user') ->getForm(); $this->view->assign(‘form’, $oForm2->createView());Dans les templates, vous pouvez écrire tout le formulaire vous-même comme ceci :
{$form->form_start} {$form->form_row[‘users’][‘id_user’]} {$form->form_row[‘title_group’]} {$form->form_end}Voici un exemple d’utilisation de contrainte sur les formulaires ce qui permettra d’invalider ou de valider un formulaire :
$oForm = $this->form ->add('Utilisateur', 'label') ->add('id_user', 'select', 'Users', null, $aUser) ->synchronizeEntity('Venus\src\Helium\Entity\user') ->addConstraint('Utilisateur', new \Venus\lib\Validator\NotBlank) ->getForm();Le formulaire n’acceptera pas d’avoir un utilisateur vide et retournera une exception.
Type de champs
Voici le type de champ existant des formulaires dans venus Framework :->add($name, $type, $label, $value) => le types possibles pour des champs input sont : text, submit, password, file, tel, url, email, search, date, time, datetime, month, week, number, color et range. L'affichage se modifier selon le navigateur utilisé et sa façon d'interpréter l'html 5.
->add($name, 'textarea', $label, $value) => permet de créer un textarea classique
->add($name, 'select', $label, $value, $listOption) => permet de créer un champ select avec un tableau d'option de type array("1"=>1, "2"=>2).
->add($name, 'label') => permet de créer un label pour votre formulaire
->add($name, 'list_checkbox', $label, $values, $valueChecked) => permet de créer une liste complète de bouton checkbox avec le ^values qui est un tableau qui permet de définir chaque bouton. Le tableau sera sous la forme array('homme' => 'h', 'femme' => 'f').
->add($name, 'checkbox', $label, $value, $valueChecked) => permet de créer un bouton checkbox.
->add($name, 'radio', $label, $value, $valueChecked) => permet de créer un bouton radio.
->add($name, 'hidden', '', $value) => permet de créer un champ caché.
[suivant]