J'utilise un JForm frontal pour manipuler des données. Le formulaire html est correct, mais lorsqu'il est renvoyé à la fonction de sauvegarde du modèle, je ne reçois pas toutes les données.
Ce sont les données que save
reçoit via $data
paramètre:
Array
(
[created] => XXXXXXXXXXXXXXXXX
[updated] => XXXXXXXXXXXXXXXXX
[wasteId] => X
[price] => XXXX
[pricenight] => XXX
[pricefreeday] => XXXX
[pricefreedaynight] => XXXX
[tags] =>
)
Mais quand j'utilise
$formData = new JRegistry($this->input->get('jform', '', 'array'));
ou quand j'ai eu les données comme le fait la méthode de sauvegarde JControllerForm
$formData = new JRegistry($this->input->post->get('jform', array(), 'array'));
J'ai
Joomla\Registry\Registry Object
(
[data:protected] => stdClass Object
(
[wasteId] => X
[price] => XXXX
[pricenight] => XXX
[pricefreeday] => XXXX
[pricefreedaynight] => XXXX
[contractId] => Array
(
[0] => XX
[1] => XX
)
[created] => XXXXXXXXXXXXXXXXX
[updated] => XXXXXXXXXXXXXXXXX
[id] => XX
)
)
Ainsi, les champs id
et contractId
sont manquants dans le $data
paramètre.
Toute idée de ce que je devrais faire pour avoir contractId
et id sur le $data
paramètre du modèle save
fonction?
À propos, le modèle que j'utilise est dérivé de JModelAdmin et le contrôleur est dérivé de JControllerForm. Le contrôleur n'a pas de fonctions remplacées qui pourraient affecter la façon dont il collecte les données du formulaire.
EDIT
Plus d'indices: inspecter le JControllerForm::save
plus en détail j'ai vu que $data
a le composant id
avec la valeur correcte mais il est remplacé par une valeur vide autour de la ligne 637 pour cette raison:
$recordId = $this->input->getInt($urlVar); // around line 634 of JControllerForm
ensembles $recordId
à une valeur vide, malgré $urlVar
valeur est "id". Puis plus tard, la ligne 637 de JControllerForm $ data ["id"] est modifiée:
$data[$key] = $recordId
$key
valeur est "id" et $recordId
est vide.
Merci.
Vous ne montrez aucun de vos codes, je vais donc passer en revue ce que je sais de JControllerForm
et JModelAdmin
- ce qui, bien sûr, sera affecté par les substitutions de votre sous-classe.
JControllerForm
La méthode save()
dans JControllerForm
utilise la ligne suivante pour extraire le tableau JForm
.
$data = $this->input->post->get('jform', array(), 'array');
Notez le segment supplémentaire ->post
Par rapport à votre test JRegistry()
, ce qui signifie qu'il ne récupère que les données des données post
soumises. Votre exemple utilise la combinaison JInput
comme source. C'est peu probable, mais si ces champs sont soumis avec l'URL du formulaire (c'est-à-dire dans la partie get
de la soumission), ils ne seront pas trouvés.
Sans plus de détails, par exemple forme html, votre code de contrôleur et de modèle (surtout si vous écrasez save/bind, etc.), c'est difficile à dire. Si vous pouvez ajouter plus de détails, je peux probablement développer ma réponse.