web-dev-qa-db-fra.com

Où empêcher le changement de valeur de champ dans l'enregistrement de fiche de composant personnalisé?

Quel est le meilleur endroit dans Joomla MVC (côté serveur) pour interdire aux utilisateurs de modifier une valeur dans un enregistrement de formulaire préexistant? Dans JTable check/bind/JModel prepareTable, ou ailleurs?

Pour le contexte, j'ai un formulaire dans mon composant avec certains champs qui ne devraient pas changer après la création initiale - bien que d'autres champs soient modifiables.

Je peux désactiver ou simplement ne pas restituer les champs dans la vue de modification de l'élément s'il possède un ID, mais cela n'arrêtera pas un POST bien conçu. J'aimerais donc simplement "ignorer" une série de valeurs si Le tableau de données a un ID> 0 (et existe donc).

2
codinghands

JTable method check est conçu pour

Méthode permettant d'effectuer des contrôles de cohérence sur les propriétés de l'instance JTable afin de garantir leur stockage en toute sécurité dans la base de données.

JTable method bind est conçu pour

Méthode pour lier un tableau ou un objet associatif à l'instance de JTable.

Donc, les deux ne sont pas conçus pour ce que vous essayez de faire.

Cependant JModel méthode prepareTable est conçu pour

Préparez et désinfectez les données de la table avant de les enregistrer.

C'est donc exactement ce dont vous avez besoin.

protected function prepareTable($table)
{
  // Row exists?
  if ((int)$table->id > 0) {
    // Ignore certain fields
    unset($table->ignoreFieldName);
  }
}
2
Rene Korss