Bonjour à tous,
je suis entrain de developper mon premier site dynamique et ce, grace aux tutoriels sur PHP de grafikart. J'en suis au jour 2 !
j'ai fait tout ce qu'il fallait faire concernant le tuto mais un petit quelque chose manque : la prise en compte de bootstrap. en effet,
en intégrant le default.php on génére nos vues automatiquement via le $content_for_layout
il n'y a pas d'erreur au niveau PHP .
Le text:
Bienvenue
C'est la page d’accueil
ce texte s'affiche bien mais bon voilà une partie prends en compte le CSS (bootstrap) et une autre non (ce que je ne comprends pas !). par exemple quand je tape http://localhost/site/monsite/pages/ la page de bienvenu s'affiche sans le CSS mais si je tape http://localhost/site/monsite/pages/view/index la page s'affiche avec le rendu CSS.. grrr !!! j'ai déplacé les fichiers du bootstrap mais à faire !!!
Alors peut être qu'il y a une astuce qui me manque mais je ne le trouve pas pour l'instant. mes codes sont en bas.si quelqu'un a déjà rencontré ce problème je suis preneur :). merci d'avance !
index.php
<?php
define('WEBROOT',dirname( __FILE__ ));
define('ROOT',dirname(WEBROOT));
define('DS',DIRECTORY_SEPARATOR);
define('CORE',ROOT.DS.'core');
define('BASE_URL',dirname(dirname($_SERVER'SCRIPT_NAME'])));
require CORE.DS.'includes.php';
new Dispatcher();
?>
Dispatcher.php
<?php
class Dispatcher{
var $request;
function __construct(){
$this->request = new Request();
//echo $this->request->url;
Router::parse($this->request->url,$this->request);
$controller = $this->loadController();
// si l'action n'est pas defini dans le tableau des controller
if (!in_array($this->request->action,get_class_methods($controller))){
$this ->error('Le controller '.$this->request->controller.' n\' a pas de methode '.$this->request->action);
}
call_user_func_array(array($controller,$this->request->action),$this->request->params); // permet de call une autre fonction
$controller->render($this->request->action);
}
/* function pour la gestion des erreurs*/
function error ($message) {
header("HTTP/1.0 404 Not Found");
$controller = new Controller($this->request);
$controller->set('message',$message);
$controller->render('/errors/404');
die();
}
function loadController() {
$name = ucfirst($this->request->controller).'Controller';
$file = ROOT.DS.'controller'.DS.$name.'.php';
require $file;
return new $name($this->request);
}
}
?>
Controller.php
<?php
class Controller {
public $request;
private $vars = array(); // variables que je fais passer à ma view
public $layout = 'default';
private $rendered = false;
function __construct ($request) {
$this->request = $request;
}
public function render($view){
if ($this->rendered) { return false;}
extract($this->vars);
if (strpos($view,'/')===0) {
$view = ROOT.DS.'view'.$view.'.php';
}else {
$view = ROOT.DS.'view'.DS.$this->request->controller.DS.$view.'.php';
}
ob_start();
require($view);
$content_for_layout = ob_get_clean();
require ROOT.DS.'view'.DS.'layout'.DS.$this->layout.'.php';
$this->rendered = 'true';
}
/* fonction qui permet d'envoyer la varible à afficher $phrase*/
public function set ($key,$value=null /* valeur optionnel*/) {
if (is_array($key)) {
$this->vars += $key;
}else{
$this->vars$key]= $value;
}
}
}
?>
Router.php
<?php
class Router{
/**
* Permet de parser une url
* @param $url Url ? parser
* @return tableau contenant les parametres
**/
static function parse ($url,$request){
$url = trim($url,'/');
$params = explode('/',$url); // explode permet de separer les differents morceaux de l'url par des "/"
$request->controller = $params[0];
$request->action = isset($params[1]) ? $params[1] : 'index';
$request->params = array_slice($params,2);
return true;
}
}
?>
Request.php
<?php
class Request{
public $url ; // URL appel? par l'user
function __construct(){
$this->url = str_replace(BASE_URL."/","",$_SERVER'REQUEST_URI']);
}
}
?>
includes.php
<?php
require 'Request.php';
require 'Router.php';
require 'Controller.php';
require 'Dispatcher.php' ;
?>
PagesController.php
<?php
class PagesController extends Controller {
function index (){
$this->render('index');
}
}
?>
default.php
<!DOCTYPE html ">
<html xmlns="http://www.w3.org/1999/xhtml xml:lang="fr" lang = "fr">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Document sans titre</title>
<link rel="stylesheet" href="../../webroot/css/bootstrap.css" >
</head>
<body>
<div class="container">
<?php echo $content_for_layout;?>
</div>
</body>
<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.6.2/jquery.min.js"> </script>
</html>
index.php (se situe dans le dossier pages)
<div class="hero-unit">
<h1> Bienvenu </h1>
<p> C'est la page d'accueil </p>
</div>
404.php
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Document sans titre</title>
</head>
<body>
<div class="hero-unit">
<h1> Page introuvable </h1>
<p> <?php echo $message ?> </p>
</div>
</body>
</html>