joomla joomla-extensions overwrite

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