Bonjour à tous,

De nouveau souci dans le tuto jour 4 à 48 min 44:

J'ai encodé dans le fichier router:

<?php
class router{

    static $routes=array();
    /**
    * Permet de parser une url
    * @param $url Url à parser
    * @return tableau contenant les paramètres
    **/
    static function parse($url,$request)
    {
        $url = trim($url,'/');
        $params = explode('/',$url);
        $request->controller = $params[0];
        $request->action = isset($params[1]) ? $params[1]:'index';
        $request->params = array_slice($params,2);
        return true;
    }
    /**
    * Connect
    **/
    static function connect($redir,$url)
    {
        $r = array();
        $r'origin']='/'.str_replace('/','\/',$url).'/';
        $r'origin']= preg_replace('/([a-z0-9]+):(^\/]+)/','${1}:(?P<${1}>${2})',$r'origin']);
        self::$routes]=$r;
        debug($r);
    }

    /**
    * 
    **/
    static function url($url)
    {
        foreach(self::$routes as $v)
        {
            if(preg_match($v'origin'],$url,$match))
            {
                debug($match);
            }
        }
        return $url;
    }
}
?>

Dans conf

<?php
class conf 
{
    static $debug = 1;
    static $databases = array('default' => array( 'host' => 'localhost',
                                                  'database' => 'asduo',
                                                  'login'=> 'root',
                                                  'password' => ''
                                                 )
                             );
}
Router::connect('post/:slug-:id','posts/view/id:([0-9]+)/slug:([a-z0-9\-]+)');
?>

Donc sur mon site j'obtiens pour le 1er debug:

Array
(
    [origin] => /posts\/view\/id:(?P([0-9]+)\)/slug:(?P([a-z0-9\-]+))/
)

Alors que je dois obtenir:

Array
(
    [origin] => /posts\/view\/id:(?P([0-9]+)\/slug:(?P([a-z0-9\-]+))/
)

Donc souci, une parenthèe apparaît.
De plus, Le deuxième debug ne donne plus rien.
Si j'enlève la ligne:

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

Alors mon debug fonctionne et j'obtiens:

Array
(
    [0] => posts/view/id:5/slug:premier-article
    [1] => 5
    [2] => premier-article
)

Ce qui correspond au tuto.

Cela doit être encore une bétise mais j'ai relu relu relu et pas moyen de trouver.

Merci.

1 réponse


Daemon
Auteur

Un petit Up.

J'ai réessayer de réencoder mais j'obtiens la même erreur.

*se gratte la tête*

Est-ce grave docteur?