Bonjour à tous
après quelques tâtements au niveau PHP, j'ai décidé de m'y lancer à bras le corps (j'ai quelques vague connaissances en création Web).
J'ai donc décidé de suivre le tutoriel : Développer un site de A à Z.
Pour la partie 1 pas de problème
Pour la partie 2 je bloque au niveau de la création de
call_user_func_array(array($controller,$this->request->action),array());
Alors qu'au niveau :
$controller->view();
tout fonctionnes.
Le problème pourrait venir du fait que je suis sous IIS 7.5; puisque le tuto utilise deux fichiers .htaccess et qu'ils ne sont pas pris en compte par IIS. J'ai donc installé sur mon serveur la réécriture d'URL et j'y ai incorporé les deux .htaccess :
RewriteEngine On
RewriteRule (.*) webroot/$1 [L]
qui doit se trouver à la racine et
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule (.*) index.php/$1 [L]
qui doit se trouver dans le répertoire webroot.
Il me crée logiquement un fichier web.config qui se place à la racine avec se code :
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<system.webServer>
<rewrite>
<rules>
<rule name="Imported Rule 1" stopProcessing="true">
<match url="(.*)" ignoreCase="false" />
<action type="Rewrite" url="webroot/{R:1}" />
</rule>
<rule name="Imported Rule 2" stopProcessing="true">
<match url="(.*)" ignoreCase="false" />
<conditions logicalGrouping="MatchAll">
<add input="{REQUEST_FILENAME}" matchType="IsDirectory" ignoreCase="false" negate="true" />
<add input="{REQUEST_FILENAME}" matchType="IsFile" ignoreCase="false" negate="true" />
</conditions>
<action type="Rewrite" url="webroot/index.php/{R:1}" />
</rule>
</rules>
</rewrite>
</system.webServer>
</configuration>
Pour être certain d'avoir écrit le bon code, je l'ai vérifié plusieurs fois par rapport à la vidéo, et j'ai comparé avec les fichier de l'archive du niveau 2 du tuto et je n'ai pas d'erreur (du moins à première et deuxième vue ;) ).
Voici mon Dispatcher.php
<?php
class Dispatcher{
var $request;
function __construct(){
$this->request = new Request();
Router::parse($this->request->url,$this->request);
$controller = $this->loadController();
$controller->view();
}
function loadController(){
$name = ucfirst($this->request->controller).'Controller';
$file = ROOT.DS.'controller'.DS.$name.'.php';
require $file;
return new $name($this->request);
}
}
?>
Ce qui "m'inquiète", c'est que je n'ai aucun message d'erreur, juste une page blanche...
Alors où est mon erreur?
Au niveau du code ? Je ne pense pas après 3 heures à essayer de trouver le problème.
Au niveau du web.config ?
Au niveau de la configuration de IIS?
ou autre ???
Je reste naturellement à votre disposition pour toutes informations complémentaire et vous remercie d'avance pour votre aide.
c'est normal, tu dois lui faire passer le contrôleur et l'action souhaité après les paramètres http://exemple.com/controller/action/params
http://projet.ctcdesigne.be/pages/view
Bonsoir RedaElkhayat,
Merci pour ton intéret à mon problème :D
mon Controller.php est vide, comme dans le tuto :
<?php
class Controller{
}
?>
Mais comme expliqué dans le tuto, la fonction est écrite dans PageCOntroller.php
<?php
class PagesController extends Controller{
function view(){
echo 'vous voyez ?' ;
}
}
?>
Normalement, il t'affiche le "vous voyez ?" ?
Tu peux me donner l'URI que tu l'as saisi, juste la partie après le premier Slash.
oui avec la ligne de code :
$controller->view();
mais pas avec la ligne :
call_user_func_array(array($controller,$this->request->action),array());
...
Voici le lien: http://projet.ctcdesigne.be/