Back to top

Autore Topic: override controller save() method non conserva i dati modificati [SOLVED]  (Letto 2966 volte)

Offline giovi

  • Instancabile
  • ******
  • Post: 9835
  • Sesso: Maschio
    • Mostra profilo
componente mvc. Nel controller sovrascrivo il metodo save() con questo:
Codice: [Seleziona]
public function save($key = null, $urlVar = null)

{
// Get the original POST data
$original = JRequest::getVar('jform', array(), 'post', 'array');

                //Altero il valore di una variabile
$original["filename"] = "1";

// Save it back to the $_POST global variable
JRequest::setVar('jform', $original);

return parent::save($key, $urlVar);
}
Sembra che nella variabile jform del post effettivamente i valori siano corretti (controllato con print_r) ma al termine del salvataggio dell'elemento i dati inseriti nel database non sono stati minimamente toccati e restano quelli inseriti dall'utente!


Lavoro su Joomla! 3 :(
« Ultima modifica: 29 Gen 2014, 09:46:39 da giovi »

Offline mmleoni

  • Global Moderator
  • Instancabile
  • *****
  • Post: 5547
  • Sesso: Maschio
  • Just another *nix coder/sysadmin...
    • Mostra profilo
Re:override controller save() method non conserva i dati modificati
« Risposta #1 il: 28 Gen 2014, 22:05:03 »
ciao,
 in realtà su J3 dovresti usare jinput, non jrequest.

comunque jrequest::setvar accetta solo una stringa come valore, a differenza del metodo omonimo di jinput.


ciao,
marco




mmleoni web consulting - creazione siti web aziendali ed e-commerce avanzati - sviluppo moduli e componenti Joomla

Offline giovi

  • Instancabile
  • ******
  • Post: 9835
  • Sesso: Maschio
    • Mostra profilo
Re:override controller save() method non conserva i dati modificati
« Risposta #2 il: 28 Gen 2014, 22:53:17 »
grazie marco,
sto tentando anche con jinput ma non riesco a venire a capo del problema:
Codice: [Seleziona]
public function save($key = null, $urlVar = null)
{
      $jinput = JFactory::getApplication()->input;

// Get the original POST data
$original = $jinput->get('jform',NULL,NULL);

$original["title"] = "1";

// Save it back to the $_POST global variable
$jinput->set('jform', $original);

parent::save($key,$urlVar);
return;
}
Se faccio un var_dump subito dopo jinput->set sulla variabile jinput->get(jform) ottengo i valori alterati ma nel salvataggio mi ritrovo sempre quelli iniziali!

Offline simone83

  • Appassionato
  • ***
  • Post: 362
  • Sesso: Maschio
    • Mostra profilo
Re:override controller save() method non conserva i dati modificati
« Risposta #3 il: 29 Gen 2014, 00:45:55 »
se guardi il codice che vai ad estendere cioe save di JControllerForm vedi che nel metodo save fa riferimento a post e non globalmente

Codice: [Seleziona]
$data  = $this->input->post->get('jform', array(), 'array');
quindi risolvi banalmente con

Codice: [Seleziona]
$jinput->post->set('jform', $original);
nella tua funzione save

ciao
BRAINCODE
Da Psd a Joomla - Sviluppo componenti joomla - SEO con Joomla
x-brain

Offline giovi

  • Instancabile
  • ******
  • Post: 9835
  • Sesso: Maschio
    • Mostra profilo
Aha! Grazie Marco e grazie Simone, grazie a voi l'override funziona come dovrebbe ed in linea con le api di Joomla! 3 :)

Questo il codice funzionante per chi avesse lo stesso problema:

Codice: [Seleziona]
public function save($key = null, $urlVar = null)
{

$jinput = JFactory::getApplication()->input;

// Get the original POST data
$original = $jinput->get('jform',NULL,NULL);

$original["campo"] = "nuovo valore";

// Save it back to the $_POST global variable
$jinput->post->set('jform', $original);

parent::save($key,$urlVar);
return;
}

 



Web Design Bolzano Kreatif