Bonjour !
J'ai un léger soucis sur une page de configuration d'un module perso. La page (module-configuration.html] se trouve dans le dossier AdminIncludes du module et propose de mettre des données à jour, mais le traitement PHP dans le contrôleur vérifie qu'il n'y a pas de bêtise. C'est un peu compliqué donc je n'ai pas pu opérer cette vérification avec du Javascript, j'ai préféré la faire côté serveur.
Mon problème c'est qu'en cas d'erreur, je veux rediriger vers cette même page de configuration mais en y incluant des paramètres, qui me permettront d'afficher ce div :
{if $error_min}
<div class="alert alert-danger" role="alert">
<h4>Erreur constatée parmi vos dimensions :</h4>
<p>Entre {$error_min} et {$error_max}m<sup>3</sup> de l'application {$error_application}</p>
</div>
{/if}
Mon contrôleur ressemble donc à ça pour l'instant :
public function update() {
//Récupérer les informations du formulaire
$request = $this->container->get("request");
//Faire le traitement en procédant par application (pour vérifier que les volumes minimaux et maximaux correspondent)
$applications = ["appli1", "appli2", "appli3"];
foreach ($applications as $application) {
$groupes = GroupeDimensionQuery::create()->filterByApplication($application)->find();
//Je crée une variable qui permet de vérifier que le minimum est tout de
// même plus grand que le maximum du groupe précédent
$precedent = 0;
//Pour chaque groupe de dimension que j'ai en BDD, je récupère sa valeur dans le formulaire
foreach ($groupes as $groupe) {
$min = $request->request->get("min".$groupe->getId());
$max = $request->request->get("max".$groupe->getId());
//Si c'est OK je sauvegarde la modification en base
if($min < $max && $min > $precedent) {
$groupe->setVolumeMin($min)->setVolumeMax($max)->save();
$precedent = $max;
//Sinon j'arrête le traitement et je renvoie vers le formulaire en montrant l'erreur
} else {
return $this->render( // => ne fonctionne pas
"module_configuration",
[
"error_min" => $min,
"error_max" => $max,
"error_application" => $application
]
);
}
}
}
//Si tout s'est bien passé, on est redirigé vers la même page de configuration
return $this->generateRedirect("/admin/module/Dimension");
}
Voilà, rien de bien compliqué, mais je bloque au niveau du else : j'aimerai que, dans ce cas, on arrête le traitement en l'état, on renvoie la page de configuration mais cette fois avec des variables qui me permettront de montrer mon div d'erreur.
Le problème c'est que la méthode generateRedirect() ne prends pas de paramètre autre que le status (optionnel), et que la méthode render() fouille directement dans le dossier templates du module, et pas dans AdminIncludes.
Comment faire pour avoir un redirect vers "/admin/module/Dimension" avec des variables en paramètres ?
Last edited by HeishPi (12-07-2019 10:54:21)