Du coup j'ai une erreur dans le routeur :
<?php
class Router
{
/**
* Permet de parser une url
* @param $url Url à parser
* @return tableau contenant les paramètres
**/
static function parse($url, $request)
{
$url = trim($url, '/');
if(empty($url))
{
$url = Router::$routes[0]'url'];
}
else
{
$match = false;
foreach(Router::$routes as $v)
{
if(!$match && preg_match($v'redirreg'], $url, $match))
{
$url = $v'origin'];
foreach($match as $k => $v)
{
$url = str_replace(':'.$k.':', $v, $url);
}
$match = true;
}
}
}
$params = explode('/', $url);
if(in_array($params[0], array_keys(self::$prefixes)))
{
$request->prefix = self::$prefixes$params[0]];
array_shift($params);
}
$request->controller = $params[0];
$request->action = isset($params[1]) ? $params[1] : 'index';
foreach(self::$prefixes as $k => $v)
{
if(strpos($request->action, $v.'_') === 0)
{
$request->prefix = $v;
$request->action = str_replace($v.'_', '', $request->action);
}
}
$request->params = array_slice($params, 2);
return true;
}
}
Fatal error: Access to undeclared static property: Router::$routes in /customers/9/2/e/alexandre-ribes.fr/httpd.www/deconutsitems/core/Router.php on line 21
Sinon voici les autres fichiers :
Controller.php
<?php
/**
* Controller
**/
class Controller{
public $request; // Objet Request
private $vars = array(); // Variables à passer à la vue
public $layout = 'default'; // Layout à utiliser pour rendre la vue
private $rendered = false; // Si le rendu a été fait ou pas ?
/*
** Constructeur
** ------------
** @request :: objet request de notre application
*/
function __construct($request)
{
// On stocke la requête dans l'instance
$this->request = $request;
}
/*
** Permet de retourner une vue
** ------------
** @view :: fichier à rendre (chemin depuis view ou nom de la vue)
*/
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;
}
/**
* Permet de passer une ou plusieurs variable à la vue
* @param $key nom de la variable OU tableau de variables
* @param $value Valeur de la variable
**/
/*
** Permet de passer une ou plusieurs variables à la vue
** ------------
** @key :: nom de la variable, ou tableau de variable
** @value :: valeur de la variable (si une seule variable)
*/
public function set($key, $value = NULL)
{
if(is_array($key))
{
$this->vars += $key;
}
else
{
$this->vars$key] = $value;
}
}
/*
** Permet de charger un model
** ------------
** @name :: nom du modèle
*/
function loadModel($name)
{
if(!isset($this->$name))
{
$file = ROOT.DS.'model'.DS.$name.'.php';
require_once($file);
$this->$name = new $name();
}
}
/**
* Permet de gérer les erreurs 404
**/
/*
** Permet de gérer les erreurs 404
** ------------
** @message :: message de l'erreur 404
*/
function e404($message)
{
header("HTTP/1.0 404 Not Found");
$this->set('message',$message);
$this->render('/errors/404');
die();
}
}
?>
Dispatcher.php
<?php
/*
** @core/Dispatcher.php
** ------------
** Permet de charger le controller en fonction de la requête utilisateur
*/
class Dispatcher{
// Objet reçu
var $request;
/*
** Constructeur du dispatcher
** Charge le controller en fonction du routing
*/
function __construct()
{
$this->request = new Request();
Router::parse($this->request->url, $this->request);
$controller = $this->loadController();
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(array($controller,$this->request->action), $this->request->params);
$controller->render($this->request->action);
}
/*
** Permet de générer une page d'erreur en cas d'un problème au niveau du rooting
*/
function error($message)
{
$controller = new Controller($this->request);
$controller->e404($message);
}
/*
** Permet de générer un message avec un titre
*/
function info($title, $message)
{
$controller = new Controller($this->request);
$controller->set(array(
'title' => $title,
'message' => $message,
));
// $this->render->('/errors/info');
}
/*
** Permet de charger le controller en fonction de la requête utilisateur
*/
function loadController()
{
if( $this->request->controller == 'Http:')
{
$name = ucfirst($this->request->controller).'Controller';
}
else
{
$name = 'PagesController';
}
$file = ROOT.DS.'controller'.DS.$name.'.php';
require($file);
return new $name($this->request);
}
}
Request.php
<?php
class Request
{
public $url;
public $page = 1;
public $prefix = FALSE;
public $Getdata = FALSE;
public $Postdata = FALSE;
public function __construct()
{
header('Expires: Mon, 12 Dec 1982 06:14:00 GMT');
header('Last-Modified: ' . gmdate('D, d M Y H:i:s') . ' GMT');
header('Cache-Control: no-cache, must-revalidate, max-age=0');
header('Pragma: no-cache');
$this->url = strlen($this->pathInfo())? $this->pathInfo() : $this->BaseUrl();
if(!empty($_POST)) $this->Postdata = $_POST;
if(!empty($_GET)) $this->Getdata = $_GET;
if(isset($this->Getdata->page)and is_numeric($this->Getdata->page) and($this->Getdata->page > 0)) $this->page = round($this->Getdata->page);
}
private function pathInfo()
{
if (strlen(getenv('PATH_INFO')) > 1) return rtrim(getenv('PATH_INFO'),'/\\');
if( array_key_exists('PATH_INFO', $_SERVER) and strlen($_SERVER'PATH_INFO']) ) return rtrim($_SERVER'PATH_INFO'], '/\\');
if( array_key_exists('ORIG_PATH_INFO', $_SERVER) and strlen($_SERVER'ORIG_PATH_INFO']) ) return rtrim($_SERVER'ORIG_PATH_INFO'], '/\\');
return rtrim(str_replace($this->BaseUrl(), '', current(explode('?',$this->Uri()))), '/\\');
}
public function Domain()
{
if(isset($_SERVER'HTTP_HOST']))
{
if(preg_match('/(localhost|127\.0\.0\.1)/', $_SERVER'HTTP_HOST']) || $_SERVER'SERVER_ADDR'] == '127.0.0.1')
{
return NULL;
}
$host = strtolower( htmlentities(strip_tags((string) $_SERVER'HTTP_HOST'])));
return preg_replace('/(^www\.|:\d+$)/i', NULL, $host);
}
if(isset($_SERVER'SERVER_NAME']))
{
$host = strtolower( htmlentities(strip_tags((string) $_SERVER'SERVER_NAME'])));
return preg_replace('/(^www\.|:\d+$)/i', NULL, $host);
}
return NULL;
}
private function Uri()
{
if( !array_key_exists('REQUEST_URI', $_SERVER) or !strlen($_SERVER'REQUEST_URI']))
{
if (isset($_SERVER'HTTP_X_REWRITE_URL']))
{
$uri = $_SERVER'HTTP_X_REWRITE_URL'];
}
else
{
$uri = BaseUrl();
}
if($_SERVER'QUERY_STRING']) $uri .= '?' . $_SERVER'QUERY_STRING'];
{
$uri = filter_var($uri, FILTER_SANITIZE_URL);
}
}
else
{
$uri = filter_input(INPUT_SERVER, 'REQUEST_URI', FILTER_SANITIZE_URL);
}
if (($uri == '/') || ($uri == '\\')) $uri .= basename(filter_input(INPUT_SERVER, 'PHP_SELF', FILTER_SANITIZE_URL));
if ((strtolower(substr($uri, -4)) == '.ico') || (strtolower(substr($uri, -4)) == '.png') || (strtolower(substr($uri, -4)) == '.gif') || (strtolower(substr($uri, -4)) == '.jpg'))
return '';
if ($uri == '') return '';
$uri = str_replace($this->Scheme(), ':#:', $uri);
$uri = str_replace(DS, '/', $uri);
$uri = str_replace(':#:', $this->Scheme(), $uri);
return rtrim($uri, '/\\');
}
public function Referrer()
{
return ( ! isset($_SERVER'HTTP_REFERER']) OR $_SERVER'HTTP_REFERER'] == '') ? '' : trim($_SERVER'HTTP_REFERER']);
}
public function Url()
{
$url = rtrim($this->BaseUrl(), '/').'/'.ltrim($this->pathInfo(),'/');
return rtrim($url, '/\\');
}
public function BaseUrl()
{
$url = $this->Scheme().(($this->ServerPort() !== '') ?($this->Domain().':'.$this->ServerPort()) : $this->Domain());
return rtrim($url, '/\\');
}
private function isHttps()
{
return (bool)(isset($_SERVER'HTTPS']) && ($_SERVER'HTTPS'] == 'on' || $_SERVER'HTTPS'] === TRUE)) ? TRUE : FALSE ;
}
private function Scheme()
{
$Scheme = 'http';
return $Scheme .=($this->isHttps() === TRUE) ? 's://':'://' ;
}
private function ServerPort()
{
return (($_SERVER'SERVER_PORT'] != 80 &&
!($this->isHttps())) ||
($_SERVER'SERVER_PORT'] != 443 &&
( $this->isHttps() == true))) ?
(int)$_SERVER'SERVER_PORT'] : '';
}
}
Model.php
<?php
class Model
{
static $connections = array();
public $conf = 'default';
public $table = false;
public $db;
public function __construct()
{
// Connexion à la base de donnée
$conf = Conf::$databases$this->conf];
if(isset(Model::$connections$this->conf]))
{
$this->db = Model::$connections$this->conf];
return true;
}
try{
$pdo = new PDO(
'mysql:host='.$conf'host'].';dbname='.$conf'database'].';',
$conf'login'],
$conf'password'],
array(PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8')
);
$pdo->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_WARNING);
Model::$connections$this->conf] = $pdo;
$this->db = $pdo;
}catch(PDOException $e){
if(Conf::$debug >= 1)
{
die($e->getMessage());
}
else
{
die('Impossible de se connecter à la base de donnée');
}
}
// Initialisation de quelques variables
if($this->table === false)
{
$this->table = strtolower(get_class($this)).'s';
}
}
/*
** Fonction de recherche
*/
public function find($req)
{
$sql = 'SELECT * FROM '.$this->table.' as '.get_class($this).' ';
// Construction de la condition
if(isset($req'conditions']))
{
$sql .= 'WHERE ';
if(!is_array($req'conditions']))
{
$sql .= $req'conditions'];
}
else
{
$cond = array();
foreach($req'conditions'] as $k=>$v)
{
if(!is_numeric($v))
{
$v = '"'.mysql_escape_string($v).'"';
}
$cond] = "$k=$v";
}
$sql .= implode(' AND ',$cond);
}
}
$pre = $this->db->prepare($sql);
$pre->execute();
return $pre->fetchAll(PDO::FETCH_OBJ);
}
public function findFirst($req)
{
return current($this->find($req));
}
}
L'erreur est listée plus haut. Sinon j'ai toujours le soucis de "No Input File Selected"
Je suis dessus depuis hier soir et personnellement je ne comprends pas :/
Si quelqu'un pourrait éclairer mes lumières