j'ai un probléme au niveau du path_info
j'ai mis ca pour résoudre le problème est ce que ca marche
class Request{
public $url;
function __construct(){
$this->url = (isset($_SERVER'PATH_INFO']) ? $_SERVER'PATH_INFO'] : substr($_SERVER'REQUEST_URI'], strlen(BASE_URL)-strlen($_SERVER'REQUEST_URI'])));
}
2 éme problème
function LoadController()
{
$name=ucfirst($this->request->controller).'Controller';
$file=ROOT.DS.'controller'.DS.$name.'.php';
require $file;
return new $name($this->request);
}
je recoit un message d'erreur
Fatal error: require() [function.require]: Failed opening required 'C:\wamp\www\Tuto\controller\ViewController.php' (include_path='.;C:\php\pear') in C:\wamp\www\Tuto\core\Dispatcher.php on line 20
il faut que je met $name='Pages'.'Controller'; au lieu du ucfirst
aidez moi svp
et le 3 ème probléme voila
Warning: call_user_func_array() expects parameter 1 to be a valid callback, class 'PagesController' does not have a method 'index.php' in C:\wamp\www\Tuto\core\Dispatcher.php on line 13
je me suis coincé La
Salut,
<u></u>
<u>Amiinleo</u> :
j'ai un probléme au niveau du path_info
j'ai mis ca pour résoudre le problème est ce que ca marche
Quel problème à tu exactement avec path_info?
<u></u>
<u>Amiinleo</u> :
je recoit un message d'erreur
Fatal error: require() [function.require]: Failed opening required 'C:\wamp\www\Tuto\controller\ViewController.php' (include_path='.;C:\php\pear') in C:\wamp\www\Tuto\core\Dispatcher.php on line 20
il faut que je met $name='Pages'.'Controller'; au lieu du ucfirst
aidez moi svp
Je pense que cette erreur est du au path_info donc faudrait d'abord résoudre se problème la. :)
Pour : $name='Pages'.'Controller' je ne comprend pas car <u>ucfirst</u> permet justement de mettre la première lettre en majuscule?
<u></u>
<u>Amiinleo</u> :
Warning: call_user_func_array() expects parameter 1 to be a valid callback, class 'PagesController' does not have a method 'index.php' in C:\wamp\www\Tuto\core\Dispatcher.php on line 13
Cette erreur est du à l'url car index.php n'est pas une méthode donc dans l'url il doit manquer la méthode à appeler. ( surement du au path_info :) )
il faut commencer avec path_info et après on regarde les autres erreurs ;)
Utilise la balise code pour montrer le code sa sera plus claire :)
Merci pour Votre réponse
tout d'abord
La class request
class Request{
public $url;
function __construct(){
$this->url =$_SERVER'PATH_INFO']);
}
$_SERVER'PATH_INFO']) est inconnu Voila l'erreur 'Notice: Undefined index: PATH_INFO in C:\wamp\www\Tuto\core\Request.php on line 9'
ensuite La class Dispatcher
class Dispatcher{
var $request;
function __construct(){
$this->request=new Request();
Router::parse($this->request->url,$this->request);
$controller=$this->LoadController();
call_user_func_array(array($controller,$this->request->action),$this->request->params);
}
function LoadController()
{
$name=ucfirst($this->request->controller).'Controller';
$file=ROOT.DS.'controller'.DS.$name.'.php';
require $file;
return new $name($this->request);
}
}
je recoit 3 erreurs
1 / ' Warning: require(C:\wamp\www\Tuto\controller\Controller.php) [function.require]: failed to open stream: No such file or directory in C:\wamp\www\Tuto\core\Dispatcher.php on line 20'
2 / 'Fatal error: require() [function.require]: Failed opening required 'C:\wamp\www\Tuto\controller\Controller.php' (include_path='.;C:\php\pear') in C:\wamp\www\Tuto\core\Dispatcher.php on line 20'
3/ Warning: call_user_func_array() expects parameter 1 to be a valid callback, class 'PagesController' does not have a method 'index.php' in C:\wamp\www\Tuto\core\Dispatcher.php on line 13
Avant de toucher au fichier essaye ceci : :)
class Request{
public $url;
function __construct(){
$this->url = isset($_SERVER'PATH_INFO'])?$_SERVER'PATH_INFO']:'/';
}
Bonjour, essaye ceci:
<?php
class Request{
public $url; // URL appellé par l'utilisateur
function __construct(){
$this->url = $_SERVER'PATH_INFO'];
}
}
?>
Et pour loadcontroller
<?php
function loadController(){
$name = ucfirst($this->request->controller).'Controller';
$file = ROOT.DS.'controller'.DS.$name.'.php';
require $file;
return new $name($this->request);
}
?>
PATH_INFO n'exite pas sur toute les configurations (tu peux l'activer en local, mais si tu es sur un serveur mutualisé ou tu ne peux pas changer la config tu dois faire comme ca), j'avais le même problème, pour résoudre ce problème j'ai remplacer comme ceci
<?php
class Request{
public $url; // URL appellé par l'utilisateur
function __construct(){
$url = '/';
if(isset($_SERVER'REQUEST_URI'])) {
$url = $_SERVER'REQUEST_URI'];
$url = substr($url, strlen(BASE_URL));
if(strpos($url, '?') > 0)
$url = substr($url, 0, strpos($url, '?'));
}
$this->url = $url;
}
}
?>
Edit : Au passage, c'est une version plus complexe que j'ai élaboré, mais celle ci, plus simple fait l'affaire également parfaitement.
<?php
class Request{
public $url; // URL appellé par l'utilisateur
function __construct(){
$url = '/';
if(isset($_SERVER'REQUEST_URI'])) {
$url = substr($_SERVER'REQUEST_URI'], strlen(BASE_URL));
}
$this->url = $url;
}
}
?>
Je précise également que ta constante BASE_URL à du être définis plus tôt par quelque chose comme ceci
define('BASE_URL', dirname($_SERVER'SCRIPT_NAME']));