Lors de l'écriture d'une vue qui soit édite crée un enregistrement, le modèle étend le modèle admin qui nécessite getTable()
et getForm()
.
Maintenant, la confusion est de savoir comment la fonction loadForm()
connaît le nombre de champs de la table associée au modèle et quel est le rôle de la fonction bind()
.
Je ne sais pas comment la classe et la forme de la table se parlent et où
Votre formulaire est défini par votre formulaire XML (généralement situé dans des modèles/formulaires). Vous choisissez d’avoir les mêmes noms que ceux de votre base dans votre base de données, mais en réalité ce n’est pas obligatoire.
Vous pouvez penser à la table comme à un wrapper autour d’une ligne à insérer. Vous passez par un processus en 3 étapes.
bind
prend le tableau de données provenant de votre formulaire, puis en stocke toutes les données dans la classe de table.
check
exécute ensuite des vérifications de sécurité sur les données que vous avez liées à la classe de table
store
stocke ensuite les données liées dans la table de base de données.
Cependant, ce qui est important, ce sont les données stockées dans la classe. Cela signifie que les noms des champs de votre formulaire sont dans une certaine mesure non pertinents. Par exemple. Vous pourriez avoir un champ dans votre formulaire appelé foobar
puis dans votre méthode de liaison, faites:
public function bind($src, $ignore = array())
{
$this->tableVar = $src['foobar'];
parent::bind($src, $ignore);
}
Et cela va essayer de stocker la variable foobar
de votre formulaire sous forme de colonne appelée tableVar
dans votre base de données
MODIFIER:
En effet, la méthode de liaison parent liera les données à la classe en tant que classe var.
public function bind($src, $ignore = array())
{
foreach ($src as $field => $value)
{
$this->$field = $value;
}
}
et puis tentera de correspondre à $field
à une colonne de base de données stockant la valeur si elle existe. Donc, l'importance de mettre $this->tablevar
ci-dessus, c’est la colonne dans votre base de données qui était tablevar
et vous n’avez pas de colonne appelée foobar, elle est maintenant stockée dans la base de données.
Le formulaire ne sait rien des champs de votre base de données. Il obtient ses champs par votre définition XML. La fonction bind()
ajoute simplement les données à l'objet, tandis que store()
publiera les données liées dans votre base de données.
En d'autres termes: vous êtes responsable de la corrélation des champs/propriétés.