Dans le tuto "Développer un site de A à Z, jour 4 : Gestion des routes", au moment 0:44:54, alors qu'on teste une expression régulière avec la fonction "debug()", au lieu du "OK" attendu, j'obtiens ce message d'erreur :
( ! ) Warning: Illegal string offset 'origin' in C:\wamp\www\tuto\core\Router.php on line 38 Call Stack #TimeMemoryFunctionLocation 10.0006144608{main}( )..\index.php:0 20.0042198112Dispatcher->__construct( )..\index.php:10 32.0148226880Controller->render( )..\Dispatcher.php:14 42.0157248080require( 'C:\wamp\www\tuto\view\posts\index.php' )..\Controller.php:36 52.0157248360Router::url( )..\index.php:9
et le tableau suivant :
( ! ) Warning: preg_match(): No ending delimiter '/' found in C:\wamp\www\tuto\core\Router.php on line 38
Call Stack
# Time Memory Function Location
1 0.0006 144608 {main}( ) ..\index.php:0
2 0.0042 198112 Dispatcher->__construct( ) ..\index.php:10
3 2.0148 226880 Controller->render( ) ..\Dispatcher.php:14
4 2.0157 248080 require( 'C:\wamp\www\tuto\view\posts\index.php' ) ..\Controller.php:36
5 2.0157 248360 Router::url( ) ..\index.php:9
6 2.0160 248496 preg_match ( ) ..\Router.php:38
puis, en bas, le lien :
posts/view/id:3/slug: mon-premier-article">Lire la suite ?
le fichier tuto\core\Router.php, le voici :
<?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).'/';
self::$routes = $r;
debug($r);
}
/**
*
**/
static function url($url){
foreach (self::$routes as $v) {
if (preg_match($v'origin'], $url,$match)) {
debug('OK');
}
}
return $url;
}
}
J'ai beau relire, revisionner la vidéo, je ne vois pas où j'ai pu faire une erreur...
Quelqu'un pourrait m'aider ?
Merci d'avance pour votre collaboration.
J'ai trouvé ! Après une journée complète passée à chercher les différences... :
ci-dessus lignes 28 et 29 :
self::$routes = $r;
debug($r);
alors qu'il fallait mettre :
self::$routes] = $r;
debug($r);
(la différence est dans les crochets ]...)
Je vais pouvoir continuer ce travail de fourmi : visionner, mettre sur pause, comprendre, recopier le code, redémarrer la vidéo, et ainsi de suite...
Heureusement que tout ça me passionne ! Je ne lâcherai pas !
Bonjour,
En rapport à ton message d'erreur visiblement ça vient de ton preg_match où aucun délimiteur de fin a été trouvé !
je dirais que ça vient de tes paramètres liés mais je n'ai pas fais le tuto du coup je sais pas !
YO.
Ça veut tout simplement dire que $v'origin'] est vide. (ou plutôt qu'il ne contient que le caractère "/")
T'es sûr que tu n'as pas d'autres erreurs? ^^
Je comprends bien que ça vient de mon preg_match, et je vois bien qu'aucun délimiteur n'a été trouvé : c'est ce qui est écrit. Et en effet, $v'origin'] a bien l'air vide. Le problème, c'est que je ne vois aucune différence avec ce qu'il y a dans la vidéo (quelqu'un qui l'a visionnée pourrait-il m'aider ?), et qu'avec toutes ces variables qui renvoient à d'autres, je suis un peu perdu. D'où viennent ce $v'origin'], et ce $r'origin'] ? Et pourquoi ai-je l'impression que l'expression :
$r'origin'] = '/'.str_replace('/', '\/', $url).'/';
est bizarre, avec son '\/' pour figurer les antislashs ? Le résultat de debug($r) à l'écran est déroutant :
Array
(
[origin] => /posts\/view\/id:([0-9]+)\/slug:([a-z0-9-]+)/
)
C'est pourtant bien ce que Grafikart a également à son écran dans la vidéo (mais lui, il n'a pas de message d'erreur, pourtant).
C'est une bonne chose que ça te passionne ! C'est comme ça que tu apprends vite !
Félicitation et n'oublie pas de mettre le sujet en résolu ! :)
Bonne continuation !
Salut! je vient juste de me mettre au MVC c'est pourquoi je regarde ce tuto. j'ai le même problème que toi et j'aimerai savoir si tu as pu trouver une solution??