web-dev-qa-db-fra.com

Erreur "Erreur fatale: Appel à une fonction membre getKeyName () sur un non-objet", mais sans table?

J'écris un petit composant pour exporter des données d'un composant de magasin, c'est mon premier composant, j'obtiens l'erreur "Erreur fatale: appel d'une fonction membre getKeyName () sur un PATH non-objet\legacy\model\admin.php on ligne 885 ", j’ai trouvé une solution, mais le problème est que je ne veux pas changer de table et que ma question est de savoir comment éviter une nouvelle table SQL? Parce que je travaille avec des tableaux de composants existants et qu'ils ne sont pas édités avec mon composant.

Mes sources:

http://forum.joomla.org/viewtopic.php?f=620&t=666986
http://stackoverflow.com/questions/21156707/fatal-error-call-to-a-member-function-getkeyname
http://stackoverflow.com/questions/12313272/error-call-to-a-member-function-getkeyname-component-for-joomla-2-5

Je comprends de cette solution que j'ai besoin d'une nouvelle table, mais je n'en ai pas besoin ...

1
jExchange

JForm correspond généralement aux colonnes d'une table de base de données lorsqu'il est utilisé avec JModelAdmin. Par conséquent, si le nom d'une colonne est add, il semblerait que add soit une colonne de cette table. .

Si vous examinez le composant de contenu (articles) et inspectez certains des champs de formulaire, recherchez dans la table de la base de données le contenu dont vous verrez les noms correspondants. Si vous voulez utiliser JForm, le meilleur moyen consiste à lui appliquer votre propre logique. Vous devez donc utiliser JModelLegacy avec un contrôleur pour intercepter et enregistrer directement dans votre propre fonction de modèle, plutôt que la valeur par défaut.

Pour à peu près toutes les fonctions de JModelAdmin, il ajoute $table = $this->getTable(); afin de pouvoir transmettre ou récupérer les données de la table. Cependant, avec JModelLegacy, il n’ya pas de connexion directe avec JForm, mais vous ne voulez que le son de la manière propre d’afficher les formulaires, il est donc probablement préférable d’ajouter cette logique à votre vue. classe quand même (le view.html.php)

Cependant, vous pouvez remplacer les fonctions de sauvegarde/récupération de JModelAdmin pour l'utiliser, mais dans l'ensemble, cela pourrait être plus de travail que d'utiliser simplement JModelLegacy à mon avis. Cela vous oblige moins et vous donne la possibilité de personnaliser davantage votre code si vous n'utilisez pas la méthode Joomla typique d'utilisation des tables.

4
Jordan Ramstad