/ / Écraser la méthode JControllerForm save () pour couper les données POST n'a aucun effet - joomla, joomla-extensions, overwrite

Écrasement de la méthode JControllerForm save () pour ajuster les données POST sans effet - joomla, joomla-extensions, overwrite

J'ai un composant qui a un contrôleur appelé MyproductControllerGeneralsetting qui s'étend JControllerForm. À l'intérieur MyproductControllerGeneralsetting J'écrase le save méthode de la classe parente afin de modifier $_POST les données, puis la méthode d'écrasement appelle la classe parente " save pour effectuer la sauvegarde réelle.

Voici la méthode remplacée dans 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);
}

Le fait est que même si j'ai "coupé chaque champ de données POST dans cette méthode d'écrasement, si j'ai des valeurs soumises telles que" valeur "(notez l'espace à la fin), elles ne sont pas coupées.

J'ai vérifié le save méthode de la JControllerForm classe et il semble obtenir les données de POST ici:

$data  = $this->input->post->get("jform", array(), "array");

Peut-être que c'est la raison? Est-ce que cela obtient des données en cache ou quelque chose?

Réponses:

4 pour la réponse № 1

Au lieu d'essayer d'obtenir les valeurs de $_POST directement, essayez d'obtenir et de définir les données de la même manière que la classe parent - en utilisant un pointeur interne vers une instance (partagée) de la classe JInput.

Voici une modification, un travail, un écrasement save méthode:

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

4 pour la réponse № 2

Le contrôleur n'est pas le bon endroit pour de telles choses de toute façon, ou y a-t-il une raison spécifique pour laquelle vous voulez le faire dans le contrôleur? Mieux regarder le prepareTable fonction dans le modèle. Là, vous avez déjà l'objet table avec les propriétés à enregistrer et vous pouvez les nettoyer avant l'enregistrement.

Information additionnelle: Si vous prolongez JControllerForm, vous pouvez spécifier

/**
* @since   1.6
*/
protected $view_item = "item";

/**
* @since   1.6
*/
protected $view_list = "items";

Par défaut, le $view_item sera égal au contexte. le $view_list essaie de deviner une version pluralisée du $view_item. Habituellement, en ajoutant un s jusqu'à la fin.