joomla - Sobrescribir JControllerForm save() El método para recortar datos POST no tiene efecto
joomla-extensions overwrite (2)
Tengo un componente que tiene un controlador llamado MyproductControllerGeneralsetting
que extiende JControllerForm
. Dentro de MyproductControllerGeneralsetting
, estoy sobrescribiendo el método save
de la clase principal para modificar $_POST
datos $_POST
y luego el método de sobrescritura llama al método save
clase principal para realizar el guardado real.
Aquí está el método sobrescrito en MyproductControllerGeneralsetting
:
/**
* We overwrite the saved form data and trim them to avoid spaces
*/
public function save($key = null, $urlVar = null){
if($_POST[''jform'']){
foreach($_POST[''jform''] as $key=>&$value){
$value = trim($value);
}
}
// Finally, save the processed form data (calls JControllerForm-save())
parent::save(''id'', $urlVar);
}
El problema es que, aunque recorté cada campo de datos POST en este método de sobreescritura, si recibo algunos valores como ''valor'' (tenga en cuenta el espacio al final), no se recortan.
He comprobado el método de save
de la clase JControllerForm
y parece que está obteniendo los datos de POST aquí:
$data = $this->input->post->get(''jform'', array(), ''array'');
Tal vez esa es la razón? ¿Esto es obtener datos en caché o algo así?
El controlador es el lugar equivocado para tales cosas de todos modos, ¿o hay una razón específica por la que desea hacerlo en el controlador? Mejor mira la función prepareTable
en el modelo. Allí ya tiene el objeto de tabla con las propiedades para guardar y puede desinfectarlo antes de guardarlo.
Información adicional: si extiende JControllerForm
, puede especificar
/**
* @since 1.6
*/
protected $view_item = ''item'';
/**
* @since 1.6
*/
protected $view_list = ''items'';
Por defecto, $view_item
será igual al contexto. $view_list
intenta adivinar una versión pluralizada de $view_item
. Generalmente agregando una s
al final.
En lugar de tratar de obtener los valores de $_POST
directamente, intente obtener y configurar los datos de la misma manera que la clase principal, utilizando un puntero interno a una instancia (compartida) de la clase JInput.
Aquí hay un método de save
sobrescrito y modificado, que funciona:
/**
* We overwrite the saved form data and trim them to avoid spaces
*/
public function save($key = null, $urlVar = null){
if($_POST[''jform'']){
// Get the original POST data
$original = JRequest::getVar(''jform'', array(), ''post'', ''array'');
// Trim each of the fields
foreach($original as $key=>$value){
$original[$key] = trim($value);
}
// Save it back to the $_POST global variable
JRequest::setVar(''jform'', $postData, ''post'');
}
// Finally, save the processed form data
return parent::save(''id'', $urlVar);
}