it-swarm.dev

Frontend: perché alcuni campi non sono nel parametro $ data della funzione di salvataggio?

Sto usando un front-end JForm per manipolare alcuni dati. Il modulo html è corretto, ma quando viene inviato alla funzione di salvataggio del modello non ricevo tutti i dati.

Questi sono i dati che save riceve attraverso $data parametro:

Array
(
    [created] => XXXXXXXXXXXXXXXXX
    [updated] => XXXXXXXXXXXXXXXXX
    [wasteId] => X
    [price] => XXXX
    [pricenight] => XXX
    [pricefreeday] => XXXX
    [pricefreedaynight] => XXXX
    [tags] => 
)

Ma quando uso

$formData = new JRegistry($this->input->get('jform', '', 'array'));

o quando ho ricevuto i dati come fa il metodo di salvataggio JControllerForm

$formData = new JRegistry($this->input->post->get('jform', array(), 'array'));

Ho avuto

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
        )
)

Quindi i campi id e contractId mancano nel $data parametro.

Qualche idea su cosa dovrei fare per avere contractId e id su $data parametro della funzione modello save?

A proposito, il modello che sto usando è derivato da JModelAdmin e il controller è derivato da JControllerForm. Il controller non ha funzioni di overriden che potrebbero influire sul modo in cui raccoglie i dati dal modulo.

[~ ~ #] modifica [~ ~ #]

Altri indizi: ispezionare il JControllerForm::save più in dettaglio ho visto che $data ha il componente id con il valore corretto ma viene sovrascritto con un valore vuoto attorno alla riga 637 per questo motivo:

$recordId = $this->input->getInt($urlVar); // around line 634 of JControllerForm

imposta $recordId a un valore vuoto, nonostante $urlVar value è "id". Successivamente, viene modificata la riga 637 di JControllerForm $ data ["id"]:

$data[$key] = $recordId

$key value è "id" e $recordId è vuoto.

Grazie.

2
Pep Lainez

Non mostri nessuno del tuo codice, quindi esaminerò solo ciò che so di JControllerForm e JModelAdmin - che ovviamente saranno influenzati da eventuali sostituzioni nella tua sottoclasse.

JControllerForm

Il metodo save() in JControllerForm utilizza la seguente riga per recuperare l'array JForm.

$data  = $this->input->post->get('jform', array(), 'array');

Nota il segmento extra ->post Rispetto al tuo test JRegistry(), ciò significa che sta ottenendo solo i dati dai dati post inviati. Il tuo esempio usa il combinato JInput come sorgente. È improbabile, ma se quei campi vengono inviati come parte dell'URL del modulo (ovvero nella parte get dell'invio), non verranno trovati.

Senza ulteriori dettagli, ad es. da html, il controller e il codice modello (specialmente se si ignora il salvataggio/associazione ecc.) è difficile da dire. Se puoi aggiungere ulteriori dettagli, probabilmente posso espandere la mia risposta.

2
Craig