web-dev-qa-db-fra.com

Pré-traitement des données de formulaire avant affichage / enregistrement - quelle est l'approche standard?

Je développe un nouveau composant Joomla où j'ai un JAdminForm appelé course.xml. Ce formulaire comporte plusieurs champs/zones de texte qui contiendront des méta-titres/balises pour un élément.

Cependant, une fois soumis et enregistrés dans la base de données, je souhaite encoder en JSON ces champs de métadonnées pour les stocker dans une colonne de base de données unique, metadata. De même, lorsque le formulaire est chargé, j'aimerais que JSON les décode dans leurs champs de formulaire respectifs pour la (ré) édition.

Il semble y avoir plusieurs approches différentes pour résoudre ce problème:

  • Remplacer JControllerFormsave()/bind()
  • Remplacer JModelAdminsave()
  • Utilisez des événements de type plugin comme onContentPrepareForm

Mon instinct est que je préférerais utiliser des plugins (ça ressemble à un marteau pilon), mais je cherche à savoir ce qui est "standard". Cela semble aussi être un cas d’usage assez courant (où la forme XML utilisée par JForm ne correspond pas exactement à la base de données), mais je ne trouve pas de ressource définitive sur la façon d’approcher./mettre en place.

3
codinghands

Je n’utiliserais pas le contrôleur, car il faudrait laisser aux contrôleurs le soin de créer le modèle, de les afficher, de les relier et de gérer toute redirection.

Comme vous le dites, la méthode du plug-in va générer des frais généraux supplémentaires sur toutes les formes, ce qui n'a aucun sens pour moi.

Donc, ma préférence va au modèle, dans sa fonction save (). Si vous regardez administrator/components/com_content/models/article.php, c'est ici que les données sont manipulées avant d'être liées et enregistrées dans la table.

Lors de l'édition, j'utiliserais la méthode getItem () du modèle pour reconvertir les données en valeurs requises par JForm.

avec Rob

3
Rob Clayburn

Fait des recherches supplémentaires sur ce ...

  • JTable bind() semble être la méthode préférée basée sur le créateur de composants Joomla pour manipuler les données avant de l'enregistrer
  • JModelAdmin getItem() semble avoir du sens pour manipuler des données avant de les afficher sous la forme admin
2
codinghands