Créer des formulaires HTML dans Astro Pages
En mode SSR, les pages Astro peuvent à la fois afficher et gérer des formulaires. Dans cette recette, vous utiliserez un formulaire HTML standard pour soumettre des données au serveur. Votre script frontmatter traitera les données sur le serveur, sans envoyer de JavaScript au client.
Prérequis
- Un projet avec SSR (EN) (
output: 'server'
) activé
Recette
-
Créez ou identifiez une page
.astro
qui contiendra votre formulaire et votre code de manipulation. Par exemple, vous pouvez ajouter une page d’enregistrement : -
Ajoutez une balise
<form>
avec quelques entrées à la page. Chaque entrée doit avoir un attributname
qui décrit la valeur de cette entrée.Veillez à inclure un élément
<button>
ou<input type="submit">
pour soumettre le formulaire. -
Utilisez la Validation des données de formulaires pour fournir une validation de base côté client qui fonctionne même si JavaScript est désactivé.
Dans cet exemple,
required
empêche la soumission du formulaire tant que le champ n’est pas rempli.minlength
fixe une longueur minimale requise pour le texte saisi.type="email"
introduit également une validation qui n’acceptera qu’un format d’email valide.
Vous pouvez ajouter une logique de validation personnalisée qui fait référence à plusieurs champs en utilisant une balise
<script>
et l’API d’implémentation des contraintes complexes.Pour écrire une logique de validation complexe plus facilement, vous pouvez construire votre formulaire en utilisant un Framework frontend et choisir une bibliothèque de formulaire comme React Hook Form ou Felte.
-
La soumission du formulaire amènera le navigateur à redemander la page. Changez la méthode de transfert de données du formulaire en
POST
pour envoyer les données du formulaire en tant que partie du corps de laRequest
, plutôt qu’en tant que paramètres d’URL. -
Vérifier la méthode
POST
dans le frontmatter et accéder aux données du formulaire en utilisantAstro.request.formData()
. Enveloppez ceci dans un bloctry ... catch
pour gérer les cas où la requêtePOST
n’a pas été envoyée par un formulaire et où lesformData
ne sont pas valides. -
Validez les données du formulaire sur le serveur. Cette validation doit être la même que celle effectuée sur le client afin d’éviter les soumissions malveillantes à votre point d’accès et de prendre en charge les rares navigateurs anciens qui ne disposent pas de la validation des formulaires.
Elle peut également inclure la validation qui ne peut pas être effectuée sur le client. Par exemple, cet exemple vérifie si l’email est déjà dans la base de données.
Les messages d’erreur peuvent être renvoyés au client en les stockant dans un objet
errors
et en y accédant dans le modèle.