Plugin Zod

Avec le package @formkit/zod, vous pouvez facilement activer la validation de vos formulaires FormKit avec votre schéma Zod. Cela offre un moyen pratique d'avoir des types isomorphes et de s'assurer que votre front-end et votre back-end utilisent les mêmes règles de validation.

Lors de la validation contre un schéma Zod, toutes les erreurs de validation seront mappées à leurs entrées correspondantes, affichées ou cachées en fonction de la propriété validation-visibility de votre formulaire / entrée, et empêcheront la soumission lorsque les données du formulaire ne passent pas la validation avec Zod.

Installation

Pour utiliser ce plugin avec FormKit, installez @formkit/zod :

yarn add @formkit/zod

Une fois que vous avez installé le package @formkit/zod, vous devrez enregistrer le plugin sur une base par formulaire et chaque formulaire qui nécessite une validation avec un schéma Zod créera une nouvelle instance du plugin en utilisant la fonction createZodPlugin.

Utilisation

Pour utiliser le plugin Zod, nous devons importer la fonction createZodPlugin de @formkit/zod, appeler la fonction createZodPlugin pour créer notre zodPlugin et submitHandler, puis les ajouter tous les deux à notre formulaire FormKit.

La fonction createZodPlugin prend deux arguments :

  • zodSchema : Le schéma Zod que vous souhaitez utiliser pour valider le formulaire.
  • submitCallback : une fonction que vous souhaitez exécuter une fois la validation réussie sur votre formulaire — c'est là que vous géreriez l'envoi de vos données à votre backend ou d'autres tâches liées à la soumission. Vos données de formulaire seront fournies avec un support complet de TypeScript basé sur votre schéma Zod.

La fonction createZodPlugin retournera un tuple de :

  • zodPlugin : Le plugin qui devrait être appliqué à la propriété plugins de votre formulaire cible.
  • submitHandler : Le gestionnaire de soumission qui devrait être attaché à l'action @submit de votre formulaire. Lorsque les données du formulaire passent la validation de votre schéma Zod fourni, votre submitCallback se déclenchera.

Pour la validation de formulaire

Voici un exemple d'utilisation d'un schéma Zod pour valider un formulaire FormKit. Il est important que les name de vos entrées FormKit correspondent aux valeurs attendues pour votre schéma Zod.

Charger l'exemple en direct

Maintenant, votre formulaire FormKit utilisera votre schéma Zod pour la validation — et tous les messages seront adjacents à chaque entrée FormKit tout comme la validation native de FormKit !

En plus de la validation FormKit

Utiliser Zod pour valider votre formulaire ne signifie pas que vous devez renoncer à utiliser les messages de validation intégrés de FormKit. Si vous ajoutez une validation FormKit à vos entrées FormKit, alors les erreurs de validation Zod ne s'afficheront que si toutes les validations FormKit ont été satisfaites et qu'il reste des validations Zod insatisfaites.

Cela présente quelques avantages :

  • Vous pouvez utiliser les règles intégrées de FormKit telles que confirm qui n'ont pas d'équivalents faciles à utiliser dans Zod.
  • Vos messages peuvent être traduits dans l'une des nombreuses langues existantes dans @formkit/i18n sans aucun effort supplémentaire de votre part.
  • Les messages de validation intégrés de FormKit sont rédigés pour être contextuellement conscients des noms de vos entrées et sachant qu'ils seront attachés directement à leurs entrées correspondantes — ils sont donc plus précis et plus faciles à comprendre que leurs homologues génériques Zod.

Voici le même formulaire qu'avant, mais maintenant en utilisant les messages de validation FormKit en plus de la validation du schéma Zod.

Charger l'exemple en direct

Pour définir les erreurs de formulaire

Si vous avez besoin de définir des erreurs sur votre formulaire, vous pouvez le faire avec la fonction node.setZodErrors qui est mise à disposition par le zodPlugin. La fonction node.setZodErrors accepte un objet ZodError et associera les erreurs à chaque entrée. Toutes les erreurs non correspondantes seront affichées comme des erreurs au niveau du formulaire.

Charger l'exemple en direct