web-dev-qa-db-fra.com

Frontend: pourquoi certains champs ne sont pas dans le paramètre $ data de la fonction de sauvegarde?

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.

2
Pep Lainez

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.

2
Craig