J'ai commencé à adopter une structure MVC, mais je bloque sur un point.
Suivant le cours d'Openclassrooms j'ai créé un template pour ma vue principale avec notamment une variable $content. A la mise en place, tout se passe bien, le contrôleur initialise ma variable $content et la vue s'affiche parfaitement.
C'est après que ça bug. J'ai un lien dans cette page qui passe par l'index puis le contrôleur pour mettre à jour ma base de donnée. Je voudrais alors retourner vers ma vue principale que je n'ai pas besoin de remettre à jour, mais je me retrouve coincé, car :
soit à la fin de l'action du contrôleur je me retrouve avec une page blanche alors que je voudrais revenir sur ma page principale
soit je me redirige vers le template avec un header('location:view/template.php') et alors celui-ci ne connaît plus la variable $content que je n'ai pas envie de réinitialiser.
Y a-t-il un moyen que le contrôleur rende la main à la page principale sans tout perdre ? Est-ce que je vais être obligé d'abandonner la solution du template ?
controller.php :
require('model/model.php') ;
function installation() {
$list=getInstallation() ; // appel de la fonction dans model.php, marche parfaitement.
require('view/main_view.php') ; // marche parfaitement.
}
function db_update() {
db_field_update() ; // appel de la fonction dans model.php, marche parfaitement.
require('view/template.php') ; // Si je ne mets pas cette ligne, j'ai une page blanche.
// Si je mets cette ligne template.php me dit qu'il ne connaît pas $content
}
main_view.php appelée par la fonction installation() du contrôleur ; marche parfaitement :
<?php ob_start();?>
<?php
//… code qui crée du html en utilisant la variable $list fournie par le contrôleur
?>
<?php $content=ob_get_clean();?>
<require('template.php') ;
Ma vue principale sur laquelle je voudrais revenir après db_update : template.php
c'est en cliquant sur la balise <a> de cette vue que j'appelle db_update via l'index. Objectif : mettre à jour la bdd sans toucher à l'affichage.
Quand je fais le require('template.php') dans db_update(), je comprends parfaitement que $content n'est pas connue du template, mais je ne veux pas avoir à réinitialiser cette variable car ça va modifier ce que voit l'utilisateur, alors que je veux que le fait de cliquer sur <a> lance des actions sur la bdd de façon totalement transparente pour l'affichage. Et si je ne fais pas le require, db_update me laisse sur une page blanche.
J'ai essayé require_once et header (j'avoue ne pas bien comprendre la différence entre les deux), mais aucun ne marche.
Je pense que le soucis viens d'un problème de compréhension de l'architecture MVC.
En soit la page qui sert pour la view ne devrait même pas être accessible par le navigateur et donc par la même occasion, sera inaccessible pour le header location.
Si tu veux afficher la view il faut passer par le contrôleur correspondant et donc passer par le fichier index.php avec la bonne action. Voici un exemple sur repl.it de la structure sur quelque chose de simplifier le plus possible : https://repl.it/repls/PiercingDutifulSolaris
Pour bien comprendre mon problème : mon but n'est pas d'afficher la view, mais tout simplement d'appeler la fonction db_update() qui n'a rien à voir avec aucune vue.
Si dans mon contrôleur la fonction est la suivante, sans require, j'atterris sur une page blanche.
function db_update() {
db_field_update() ; // appel de la fonction dans model.php, no pb.
}
Ma question est donc très générale finalement : comment, en passant par l'index, appeler une fonction php qui n'a aucun impact sur la view sans arriver sur une page blanche ? Est-ce que mon problème vient du fait que je l'appelle depuis une balise <a> plutôt qu'un open('GET',...) caché derrière un eventlistener en JS ?
Merci.
Perte variables quand redirection vers template
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
Postez votre code et vos msg d'erreurs - "ça marche pas" n'est pas un message d'erreur ...
Postez votre code et vos msg d'erreurs - "ça marche pas" n'est pas un message d'erreur ...
My website : Mon serveur discord, Se demerder tout seul, Faille XSS et SQL