La présentation est en train de télécharger. S'il vous plaît, attendez

La présentation est en train de télécharger. S'il vous plaît, attendez

Symfony Formulaires. Helper formulaire Éviter les get, multipart.

Présentations similaires


Présentation au sujet: "Symfony Formulaires. Helper formulaire Éviter les get, multipart."— Transcription de la présentation:

1 symfony Formulaires

2 Helper formulaire Éviter les get, multipart => true, class => simpleForm ) ?> Fermé par

3 Helper champs de formulaire texte tout les champs et contrôles ont un attribut id déduit de l'attribut name 10x20 ) ) ?> default

4 Helper champs de formulaire choix

5 'Visa', 'Eurocard' => 'Eurocard', 'Mastercard' => 'Mastercard ), array('Visa', 'Mastercard') ), array('multiple' => true) ) ?> Visa Eurocard Mastercard Helper champs de formulaire sélection – syntaxe la plus élégante

6 Helper champs de formulaire autres

7 helper submit_image_tag() même syntaxe helper image_tag(). Helper champs de formulaire soumission

8 Gestion de la soumission Bonne pratique : utiliser la même action pour afficher et gérer le formulaire. public function executeEditAuthor() { if ($this->getRequest()->getMethod() != sfRequest::POST) { // Affichage du Formulaire return sfView::SUCCESS; } else { // Management de la soumission du formulaire $name = $this->getRequestParameter('name');... $this->redirect('mymodule/anotheraction'); } mymodule/actions/actions.class.php mymodule/templates/editAuthorSuccess.php

9 Gadget date poor Choose a day)) ?> Choose a day

10 Gadget date rich true') ?>

11 Gadget date valeur par défaut dates reconnues par la fonction PHP strtotime() Aucune valeur par défaut Les Formats de date autre quanglais ne fonctionnent pas (14/12/2008)

12 Rich text TinyMce tinymce/jscripts/tiny_mce/ => web/js/ settings.yml all:.settings: rich_text_js_dir: js/tiny_mce true, size => 10x20, tinymce_options => language:"fr",theme_advanced_buttons2:"separator" ) ) ?>

13 Rich text Fck fkceditor/ => web/js/ Myproject/apps/myapp/config/settings.yml all:.settings: rich_text_fck_js_dir: js/fckeditor fck, size => 10x20, ) ) ?>

14 Sélecteur de Pays et de Langage Afghanistan Albania Algeria American Samoa … Elamite English English, Middle ( ) English, Old (ca ) Erzya Esperanto …

15 Helper formulaire pour objet getTelephone()) ?>

16 object_input_tag($object, $method, $options) object_input_date_tag($object, $method, $options) object_input_hidden_tag($object, $method, $options) object_textarea_tag($object, $method, $options) object_checkbox_tag($object, $method, $options) object_select_tag($object, $method, $options) object_select_country_tag($object, $method, $options) object_select_language_tag($object, $method, $options) object_password_tag() nexiste pas car ce nest pas une bonne idée dinitialiser un mot de passe avec quelque chose de saisi par lutilisateur Helper formulaire pour objet

17 Peupler une liste déroulante avec des objets 'Steve', '2' => 'Bob', '3' => 'Albert', '4' => 'Ian', '5' => 'Buck' ), 4) ?> Steve Bob Albert Ian Buck

18 Code contrôleur typique Dans laction $options = array(); foreach ($authors as $author) { $options[$author->getId()] = $author->getName(); } $this->options = $options; Dans le template MIEUX!

19 Peupler une liste déroulante à base dune clé étrangère getAuthorId() )) ?> MIEUX! Le helper devine à partir de la méthode passée en paramètre le nom de la classe peer associée AuthorPeer le nom de la méthode peer à utiliser doSelect(new Criteria) La méthode à utiliser sur chaque objet de la liste __toString() si elle existe ou la clé primaire sinon

20 Peupler une liste déroulante à base dune clé étrangère – version explicite Spécifier la classe peer utilisée pour retrouver les valeurs Spécifier la méthode peer utilisée pour retrouver les valeurs Ajouter un item blanc en début de liste Ajouter un item personnalisé en début de liste Les options de ce helper sont combinables en utilisant un tableau doptions

21 Validation de formulaire Formulaire typique Name: Age: Message: name est obligatoire et est un texte entre 2 et 100 caractères. est obligatoire et est un texte entre 2 et 100 caractères, et doit être valide age est obligatoire et doit être un entier entre 0 et 120 message est obligatoire

22 Les validateurs Symfony met à disposition des validateurs usuels Un validateur possède une méthode execute() –Prend une valeur de champ en paramètre –Retourne vrai si la valeur est valide, false sinon Emploi de sfStringValidator pour les deux premiers champs –Il vérifie que la taille dun string est compris dans lintervalle défini lors de lappel de la méthode initialize()

23 modules/contact/action/actions.class.php public function validateSend() { $name = $this->getRequestParameter('name'); if (!$name) { $this->getRequest()->setError('name', 'The name field cannot be left blank'); return false; } characters $myValidator = new sfStringValidator(); $myValidator->initialize($this->getContext(), array( 'min' => 2, 'min_error' => 'This name is too short (2 characters minimum)', 'max' => 100, 'max_error' => 'This name is too long. (100 characters maximum)', )); if (!$myValidator->execute($name, $error)) { return false; } return true; }

24 Processus de validation Si lutilisateur rentre une valeur incorrecte –la méthode execute de sfStringValidator retournera false Laction validateSend échouera –La méthode handleErrorSend sera appelée au lieu de la méthode executeSend() La classe sfRequest met à disposition une méthode setError(), et une méthode hasError() pour afficher des messages derreurs précis –Cest le rôle que jouent les paramètres min_error max_error

25 Fichier de validation modules/contact/validate/send.yml fields name: required: msg: The name field cannot be left blank sfStringValidator: min: 2 min_error: This name is too short (2 characters minimum) max: 100 max_error: This name is too long. (100 characters maximum) Toutes les validations sont effectuées Tous les messages derreur seront affichés La validation globale échoue si au moins une validation de champs échoue La méthode validateXXX() sera ensuite exécutée si elle existe Les fichiers de validations sont stockés dans le répertoire validate/ du module et sont nommés nomAction.yml

26 Réafficher le formulaire En cas déchec –handleErrorSend() est exécutée si elle existe Sinon le template sendError.php est affiché Habituellement si la validation echoue on souhaite réafficher le formulaire –Redéfinir handleErrorSend() en la redirigeant vers laffichage du formulaire

27 modules/contact/actions/actions.class.php class ContactActions extends sfActions { public function handleErrorSend() { $this->forward('contact', displayForm'); } public function executeSend() { // traitement du formulaire } Si cest la même action qui affiche le formulaire et qui le traite handleErrorSend() na quà renvoyer sfView::SUCCESS pour réafficher sendSuccess.php

28 Code typique de gestion dun formulaire avec symfony class ContactActions extends sfActions { public function executeSend() { if ($this->getRequest()->getMethod() != sfRequest::POST) { // Prepare data for the template, should be shared return sfView::SUCCESS; } else { // traite le formulaire $this->redirect('mymodule/anotheraction'); } public function handleErrorSend() { // Prepare data for the template, should be shared return sfView::SUCCESS; }

29 Afficher les message derreurs dans les formulaires hasErrors()): ?> valeurs incorrectes: getErrors() as $name => $error): ?> :

30 Afficher les message derreurs au niveau des champs hasError('name')): ?> getError('name') ?> Name: Name: Ou via les helpers Validation

31 Repeupler le formulaire Peut se faire via $sf_params –Simple forward donc la requête est toujours accessible get('name')) ?> Sinon laisser faire symfony –validate/send.yml fillin: enabled: true param: name: test # nom du forumlaire sil y en a plusieurs skip_fields: [ ] # champs exclus exclude_types: [hidden, password] # types de champs exclus check_types: [text, checkbox, radio, select, hidden] # champs à repeupler content_type: html # html, xml ou xhtml

32 Transformation des données repeuplées Pour transformer les données réaffichées –Entities, escaping etc … –validate/send.yml fillin: enabled: true param: name: test converters: # Converters to apply htmlentities: [first_name, comments] htmlspecialchars: [comments]

33 Les validateurs symfony sfStringValidator applique des contraintes sur les chaînes de carctères sfStringValidator: values: [foo, bar] values_error: The only accepted values are foo and bar insensitive: false # If true, comparison with values is case insensitive min: 2 min_error: Please enter at least 2 characters max: 100 max_error: Please enter less than 100 characters sf Validator vérifie la validité dun adresse sf Validator: strict: true # est valide, sinon RFC822 _error: This address is invalid

34 Les validateurs symfony II sfNumberValidator vérifie quune entrée est bien un nombre et lui applique des contraintes de taille sfNumberValidator: nan_error: Please enter an integer min: 0 min_error: The value must be at least zero max: 100 max_error: The value must be less than or equal to 100 sfUrlValidator vérifie la validité dune url sfUrlValidator: url_error: This URL is invalid

35 Les validateurs symfony III sfRegexValidator vérifie quune entrée est conforme ou non à un masque dexpression régulière compatible perl sfRegexValidator: match: No # spécifie que lentrée doit vérifier le masque (ne doit pas sinon) match_error: Posts containing more than one URL are considered as spam pattern: /http.*http/si sfCompareValidator vérifie que deux entrées sont égales fields: password1: required: msg: Please enter a password password2: required: msg: Please retype the password sfCompareValidator: check: password1 compare_error: The two passwords do not match

36 Les validateurs symfony IV sfPropelUniqueValidator vérifie quune entrée nexiste pas déjà en bas de données (pratique pour le identifiant unique) fields: nickname: sfPropelUniqueValidator: class: User column: login unique_error: This login already exists. Please choose another one. sfCallbackValidator vérifie que deux entrées sont égales fields: account_number: sfCallbackValidator: callback: is_numeric invalid_error: Please enter a number. credit_card_number: sfCallbackValidator: callback: [myTools, validateCreditCard] # doit renvoyer true ou false invalid_error: Please enter a valid credit card number.

37 Les validateurs symfony V sfFileValidator vérifie quun fichier uploadé a le bon type mime et la bonne taille fields: image: file: True required: msg: Please upload an image file sfFileValidator: mime_types: - 'image/jpeg' - 'image/png' - 'image/x-png' - 'image/pjpeg' mime_types_error: Only PNG and JPEG images are allowed max_size: max_size_error: Max size is 512Kb.

38 DRY – les validateurs nommés validators: myStringValidator: class: sfStringValidator param: min: 2 min_error: This field is too short (2 characters minimum) max: 100 max_error: This field is too long (100 characters maximum) fields: name: required: msg: The name field cannot be left blank myStringValidator: required: msg: The field cannot be left blank myStringValidator: sf Validator: _error: This address is invalid

39 Restriction de validation à la méthode POST ou GET La validation est appelé par défaut pour la méthode POST –redéfinissable globalement ou champs par champs methods: [post] fields: methods: [post, get] # redéfinit la conf globale required: msg: The field cannot be left blank sf Validator: _error: This address is invalid

40 Validateur personnalisé Tout validateur hérite de sfValidator Stocké dans un des répertoires lib/ La méthode execute() prend la valeur à valider et le message derreur en paramètre La méthode initalize() recoit le singletion context, et les paramètres du fichier YAML en paramètre –Elle doit commencer par appeler la méthode initalize de la classe dont elle dérive (sfValidator) –Elle définit les paramètres si le ichier YAML nexiste pas Tout validateur peut accéder aux paramètres via $this->getParameterHolder()

41 Validateur personnalisé code class sfSpamValidator extends sfValidator { public function execute (&$value, &$error) { $re = '/'.implode('.*', array_fill(0, $this->getParameter('max_url') + 1, 'http')).'/is'; if (preg_match($re, $value)) { $error = $this->getParameter('spam_error'); return false; } return true; } public function initialize ($context, $parameters = null) { parent::initialize($context); $this->setParameter('max_url', 2); $this->setParameter('spam_error', 'This is spam'); $this->getParameterHolder()->add($parameters); return true; }

42 Validateur personnalisé utilisation validate/send.yml message: required: msg: The message field cannot be left blank sfSpamValidator: max_url: 3 spam_error: Leave this site immediately, you filthy spammer!

43 Utilisation de la syntaxe tableau dans les formulaires PHP permet dutiliser la syntaxe tableau dans les formulaires Title: Incidence sur le fichier de validation fields: story{title}: required: Yes

44 Exécution dun validateur sur un champs vide Exemple du changement de mot de passe fields: password1: password2: sfCompareValidator: check: password1 compare_error: passwords mismatch Valide un mot de passe blanc!! fields: password1: group: group_password password2: group: group_password sfCompareValidator: check: password1 compare_error: passwords mismatch Les tests agissant sur un groupe ne sapplique que si un des champs membre nest pas vide


Télécharger ppt "Symfony Formulaires. Helper formulaire Éviter les get, multipart."

Présentations similaires


Annonces Google