Joomla.it Forum

Non solo Joomla... => Sviluppo => : giovi 28 Jan 2014, 21:43:22

: override controller save() method non conserva i dati modificati [SOLVED]
: giovi 28 Jan 2014, 21:43:22
componente mvc. Nel controller sovrascrivo il metodo save() con questo:
:
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 :(
: Re:override controller save() method non conserva i dati modificati
: mmleoni 28 Jan 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




: Re:override controller save() method non conserva i dati modificati
: giovi 28 Jan 2014, 22:53:17
grazie marco,
sto tentando anche con jinput ma non riesco a venire a capo del problema:
:
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!
: Re:override controller save() method non conserva i dati modificati
: simone83 29 Jan 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

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

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

ciao
: Re:override controller save() method non conserva i dati modificati [SOLVED]
: giovi 29 Jan 2014, 09:49:03
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:

:
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;
}