Bonjour a tous voila que je suis entrain de suivre le tuto sur la conception d'un cms en mvc (7 chapitres 7 jours).
J'ai deux questions:

La premiere:

Je n'ai pas trop bien saisit comment la variable qui se trouve dans le default.php (templates) se remplis? où est-ce reelement definis. (template_content ou un truc du gout je me rapelle plus du nom exactement et je ne sais plus ou cela se trouve dans la video).

L'autre question:

La fonction routeur::webroot, ou alors je me suis endormis ou je n'ai pas tous saisis mais je ne sais plus du tous dans quel chapitres (video ) elle se trouve.. quelqu'un pourrait m'eclairé???

Merci en tous cas et super site =)

3 réponses


Bonjour,
1er question: la variable content_for_layout (je crois) est défini dans le controller => methode render()
2e question: Regarde la vidéo Jour 4 Gestion des routes

captainz
Auteur

Merci merci je viens de regarder a nouveau le tuto sur le routing... je n'y trouve pas la fonction webroot...

De plus, sur ce tuto on peut carrement le faire autrement(en htaccess) ou alors on doit utiliser ce systeme??? car il dit dans la video que l'on a le choix entre son routing (lourd) ou du htaccess, vous conseillez quoi???

Et si quelqu'un pouvait me filer le code webroot ou alors me dire dans quel video elle se trouve ...

Merci

captainz
Auteur

Re bonjour j'ai un gros soucis avec le routing... je sais pas d'où viens mais maintenant j'ai cette erreur la:

Warning: preg_match() <a href='function.preg-match'>function.preg-match</a>]: Compilation failed: two named subpatterns have the same name at offset 87 in routeur ligne 104 ce qui correspond au pregmatch de cette fonction la:

static function url($url = ''){
        trim($url,'/'); 
        foreach(self::$routes as $v){
            if(preg_match($v'originreg'],$url,$match)){
                $url = $v'redir']; 
                foreach($match as $k=>$w){
                    $url = str_replace(":$k:",$w,$url); 
                }
            }
        }
        foreach(self::$prefixes as $k=>$v){
            if(strpos($url,$v) === 0){
                $url = str_replace($v,$k,$url); 
            }
        }
        return BASE_URL.'/'.$url; 
    }

..

voici le code complet de mon routeur...

<?php
/**
* Classe de routing à utiliser pour un MVC 
* Permet de rediriger des URLs vers des URL au format MVC controller/action/param/param/param....
* routeur::prefix('cockpit','admin');
* routeur::connect('','posts/index');
* routeur::connect('cockpit','cockpit/posts/index');
* routeur::connect('blog/:slug-:id','posts/view/id:([0-9]+)/slug:([a-z0-9\-]+)');
* routeur::connect('blog/*','posts/*');
*
**/
class routeur{

    static $routes = array(); 
    static $prefixes = array(); 

    /**
    * Ajoute un prefix au Routing
    **/
    static function prefix($url,$prefix){
        self::$prefixes$url] = $prefix; 
    }

    /**
    * 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 = routeur::$routes[0]'url']; 
        }else{
            $match = false; 
            foreach(routeur::$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';
        $request->params = array_slice($params,2);
        return true; 
    }

    /**
    * Permet de connecter une url à une action particulière
    **/
    static function connect($redir,$url){
        $r = array();
        $r'params'] = array();
        $r'url'] = $url;  

        $r'originreg'] = preg_replace('/([a-z0-9]+):(^\/]+)/','${1}:(?P<${1}>${2})',$url);
        $r'originreg'] = str_replace('/*','(?P<args>/?.*)',$r'originreg']);
        $r'originreg'] = '/^'.str_replace('/','\/',$r'originreg']).'$/'; 
        // MODIF
        $r'origin'] = preg_replace('/([a-z0-9]+):(^\/]+)/',':${1}:',$url);
        $r'origin'] = str_replace('/*',':args:',$r'origin']); 

        $params = explode('/',$url);
        foreach($params as $k=>$v){
            if(strpos($v,':')){
                $p = explode(':',$v);
                $r'params']$p[0]] = $p[1]; 
            }
        } 

        $r'redirreg'] = $redir;
        $r'redirreg'] = str_replace('/*','(?P<args>/?.*)',$r'redirreg']);
        foreach($r'params'] as $k=>$v){
            $r'redirreg'] = str_replace(":$k","(?P<$k>$v)",$r'redirreg']);
        }
        $r'redirreg'] = '/^'.str_replace('/','\/',$r'redirreg']).'$/';

        $r'redir'] = preg_replace('/:([a-z0-9]+)/',':${1}:',$redir);
        $r'redir'] = str_replace('/*',':args:',$r'redir']); 

        self::$routes] = $r; 
    }

    /**
    * Permet de générer une url à partir d'une url originale
    * controller/action(/:param/:param/:param...)
    **/
    static function url($url = ''){
        trim($url,'/'); 
        foreach(self::$routes as $v){
            if(preg_match($v'originreg'],$url,$match)){
                $url = $v'redir']; 
                foreach($match as $k=>$w){
                    $url = str_replace(":$k:",$w,$url); 
                }
            }
        }
        foreach(self::$prefixes as $k=>$v){
            if(strpos($url,$v) === 0){
                $url = str_replace($v,$k,$url); 
            }
        }
        return BASE_URL.'/'.$url; 
    }

    static function webroot($url){
        trim($url,'/');
        return BASE_URL.'/'.$url; 
    }

}

Je vois vraiment pas merci de m'aider :D

Surtout que je n'ai que ca sur la partie "forum " que je crée de toute piece moi meme...et ce lorsque j'affiche les cats, ou le forum ou le topic mais une fois que je suis entrain de crée un forms ca passe... voici mon code conf on ne sait jamais:

<?php
/*Gestion de la database*/
class conf{
    static $debug = 1;

    static $database = array(
    'default'=>array(
        'host'=>'Localhost',
        'database'=>'projet',
        'login'=>'root',
        'password'=>'',
        array(PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8')
        )
);

}
routeur::connect('creation-forum-:slug-:cat_id-:forum_id-:topic_id','forum/forms/slug:([a-z0-9\-]+)/cat_id:([0-9\-]+)/forum_id:([0-9\-]+)/topic_id:([0-9\-]+)');
routeur::connect('verification-forum-:cat','forum/verification_forms/cat:([a-z0-9\-]+)');
routeur::connect('forum-:slug','forum/voircat/slug:([a-z0-9\-]+)');
routeur::connect('topic:id','forum/voirtopic/id:([0-9\-]+)');
routeur::connect('forums-:slug','forum/voirforum/slug:([a-z0-9\-]+)');
routeur::connect('pages/:slug-:id','pages/view/id:([0-9]+)/slug:([a-z0-9\-]+)');
?>

Merci merci