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 № 1Au 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.