Bonjour,

J'ai suivi la formation POO et le tutoriel pour Créer un router de ce site. Le code séparé pour la POO (sorte de mini-framework qu'on apprend) et le code sur le router (accessible ici) marche très bien séparemment. Mais une fois regroupé, ça ne marche pas pour toutes les fonctionnalités du router. Explication ci-dessous.

Si vous n'avez pas suivi la formation et le tuto, ça va être difficile de comprendre vu qu'il faut connaître l'arborescence du mini-framework et le code du tuto.

Ce que j'ai actuellement

Actuellement, l'arborescence de la formation POO est la suivante :

image

Le point d'entrée réel est dans public/index.php (index.php à la racine pointe juste sur lui, rien d'extraordinaire). Sans router, cela donne ceci :

<?php
define('ROOT', dirname(__DIR__));

require ROOT . '/app/App.php';

App::load();
?>

Je ne mets pas ici le code du router, il est sur ce lien donné aussi plus haut.

Ce qui me semble bien

Lorsqu'on regarde le code de slim-framework par exemple, on voit que index.php commence ainsi :

<?php
require 'vendor/autoload.php';

$app = new Slim\App();

$app->get('/hello/{name}', function ($request, $response, $args) {
    return $response->write("Hello, " . $args['name']);
});

$app->run();
?>

Ça ressemble fortement à mon code, les routes sont données à la suite de l'instanciation de l'objet App(). Ce qui donne pour mon code :

<?php
define('ROOT', dirname(__DIR__));

require ROOT . '/app/App.php';

App::load();

require ROOT . '/config/routes.php';
?>

Dans le fichier routes.php, j'ai ceci :

<?php
$router = new \Core\Router\Router($_GET['url']);

$router->get('/', 'Pages#index');
$router->get('/blog', 'Blog#index');

$router->run();
?>

Seulement, l'instanciation de Router() dans ce fichier pose un problème : la porter de la variable $router. Un exemple parlant : si je veux utiliser la possibilité de créer une URL avec le router dans le template par défaut, je dois faire ceci :

<a href="<?= $router->url('Pages#index'); ?>">HOME</a>

On a le droit à : Notice: Undefined variable: router in /test/app/Views/templates/default.php

Ce que vous en pensez

Le gros problème, c'est bien l'instanciation de Router() :

<?php
$router = new \Core\Router\Router($_GET['url']);

Où placer ce fichu bout de code pour que je puisse avoir accès au router partout ? J'ai cherché avec l'injecteur de dépendance, je n'ai pas réussi (je ne maîtrise pas en plus)

1 réponse


JeremyB
Auteur

Personne n'a de piste s'il vous plait ? Comment faites vous de votre côté ? (pour ceux qui ont suivi la formation ou ceux qui ont voulu créer leur propre framework)