Joomla.it Forum
Non solo Joomla... => Sviluppo => : Kumidan 26 Aug 2011, 18:53:11
-
Nel backend del mio componente si possono inserire dei nuovi elementi in alcune tabelle.
Per una di queste, mentre si effettua il salvataggio, quindi all'inizio della funzione bind() devo leggere i valori che arrivano, ma non riesco a farlo.
Suppongo debba leggerli dalla variabile $array, ma come leggo i file da lì?
Ad esempio uno dei campi della form che si compila per inserire una nuova entry si chiama "name", ho provato sia a leggere $array['params'][''name'] che $array['name'], ma in nessun caso ho ottenuto il valore che cerco.
Ho anche provato ad usare la variabile $registry, ma senza ottenere nulla.
Come leggo i valori che stanno per essere salvati nel db?
-
non devi leggere nulla, passi il post al bind e il check lo fai.... nel check
M.
-
in effetti 'passi il post al bind' è un poco criptico.
$row =& $this->getTable();
$data = JRequest::get( 'post' );
$data['id'] = JRequest::getVar('id', '', 'post', 'int');
// altri checks
if(!$row->bind($data){
//gestione errore
};
la prima riga associa il dati ricevuti all'array, la seconda forza il field 'id' ad un intero: questo è un controllo che devi fare per verificare che cosa viene inserito in ogni campo (per evitare sql injection).
l'ultima riga salva nel db.
io personalmente preferisco inserire i controlli di sicurezza direttamente dentro il metodo store(), mentre nel check() inserisco quelli di coerenza delle informazioni.
ps: ma quelle variabili da dove saltano fuori?
ciao,
marco
-
edit
-
in effetti 'passi il post al bind' è un poco criptico.
[...]
Per le variabili pensavo fossero nomi standard, ma forse non lo sono. Il fatto è che ho usato un tool online per costruire lo scheletro del componente, non le ho scritte io quelle variabili.
All'interno del file /administrator/components/com_nomecomponente/tables/campoform.php ho sia la funzione bind() che la funzione check()
public function bind($array, $ignore = '')
{
if (isset($array['params']) && is_array($array['params'])) {
$registry = new JRegistry();
$registry->loadArray($array['params']);
$array['params'] = (string)$registry;
}
if (isset($array['metadata']) && is_array($array['metadata'])) {
$registry = new JRegistry();
$registry->loadArray($array['metadata']);
$array['metadata'] = (string)$registry;
}
return parent::bind($array, $ignore);
}
/**
* Overloaded check function
*/
public function check() {
//If there is an ordering column and this is a new row then get the next ordering value
if (property_exists($this, 'ordering') && $this->id == 0) {
$this->ordering = self::getNextOrder();
}
return parent::check();
}
Il codice che mi hai scritto devo usarlo dentro la funzione check(), giusto?
-
all'interno del metodo bind(), e solo all'interno di questo, il valore dovrebbe essere in $array['name'], ma devi fare riferimento alla documentazione del tool, così è impossibile sapere dove sono ricevuti i dati passati alla funzione bind.
all'interno di check() il valore è in this->name, ti conviene agire qui.
ciao,
marco
-
Grazie, adesso riesco a gestire l'inserimento come volevo! :)
-
ricordati il [RISOLTO] nel titolo del post di apertura.
ciao,
marco