Bonjour, j'espère ne pas me tromper de section pour le message,
J'ai un peu de mal à voir d'où vient mon erreur, surement un truc tout bête mais bon...
Mon problème est le suivant :
Je suis toujours rediriger sur la page 404, cela fonctionne bien lorsque l'appel d'une vue ou d'une action n'existe pas, mais lorsque je souhaite appeler une vue existante, je suis automatiquement rediriger sur la page 404.
mon dossier vue se présente de la façon suivante :
-> BoLayout -> BoDefault.php
-> Errors -> 404.php
-> Pages -> Index.php
Ici le code du Dispatcher.php
<?php
class Dispatcher{
var $request;
function __construct()
{
$this->request = new Request();
Router::parse($this->request->url, $this->request);
$controller = $this->loadController();
//get_class_methods — Retourne les noms des méthodes d'une classe
if (!in_array($this->request->action, get_class_methods($controller))) {
$this->error('le controller' . $this->request->controller . 'n\'a pas de méthode' . $this->request->action);
}
// call_user_func_array — Appelle une fonction de rappel avec les paramètres rassemblés en tableau
// premier paramètre la fonction de rappel à appeler
// les paramètres à passer à cette fonction de rappel
call_user_func_array(array($controller, $this->request->action), $this->request->params);
//rend la vue qui correspond
$controller->render($this->request->action);
}
function error($message) {
header("HTTP/1.0 404 Not Found");
$controller = new Controller($this->request);
$controller->set('message',$message);
$controller->render('/Errors/404');
die();
}
/**
* Cette fonction à pour but de charger le controller
* @return mixed
*/
function loadController() {
//ucfirst met le premier caractère en majuscule
$name = ucfirst($this->request->controller).'Controller';
// on inclut le fichier
$file = ROOT.DS.'controller'.DS.$name.'.php';
require $file;
return new $name($this->request);
}
}
Ici le code du Controller principal :
<?php
class Controller {
public $request;
private $vars=array();
public $layout = 'BoDefault';
private $rendered = false;
function __construct($request) {
$this->request = $request;
}
public function render($view) {
if($this->rendered){
return false;
}
//extract — Importe les variables dans la table
extract($this->vars);
//strpos — Cherche la position de la première occurrence dans une chaîne
if(strpos($view,'/')===0){
$view = ROOT.DS.'view'.$view.'.php';
}
else {
$view = ROOT . DS . 'view' . DS . $this->request->controller . DS . $view . '.php';
}
//ob_start() démarre la temporisation de sortie.
//Tant qu'elle est enclenchée, aucune donnée, hormis les en-têtes, n'est envoyée au navigateur, mais temporairement mise en tampon.
ob_start();
require($view);
//ob_get_clean — Lit le contenu courant du tampon de sortie puis l'efface
$content_test = ob_get_clean();
require ROOT.DS.'view'.DS.'BoLayout'.DS.$this->layout.'.php';
$this->rendered = true;
}
public function set($key,$value=null) {
if (is_array($key)) {
$this->vars += $key;
}
else {
$this->vars$key] = $value;
}
}
}
Merci d'avance pour votre aide