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.

6 réponses


RedaElkhayat
Réponse acceptée

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

Bonjour,
à quoi ressemble-t-il ton controller ?

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/

Je n'avais pas vu le problème de ce côté ;)

Un grand merci pour ton aide :D