web-dev-qa-db-fra.com

Que fait la fonction bind de JTable et pourquoi est-elle utile?

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ù

3
Sumer Raj Chouhan

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.

8
George Wilson

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.

3
Nils Rückmann