Bonjour,

Je vous explique, je viens d'attaquer le triptique Design Pattern, router, autoloading et je coince sur la compréhension du routage.
Je suis le tuto très bien fait de Grafikart, cependant je n'obtiens pas les même résultat. En effet, quand je déclare new Altorouter, mon editeur de texte VSCode me dit qu'il est undefined et quand je créé ma route j'ai une page blanche. Pourtant dans mon composer tout semble ok.

Any help please?

Mon code index.php

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

$router= new AltoRouter();
$router-> map('GET', '/', function(){
    require __DIR__ . '/public/home.php';
});

Mon composer.json

{
    "name": "thumelhans/organigramme",
    "description": "Site presentant une organigramme interactif",
    "authors": [
        {
            "name": "Tristan Humelhans",
            "email": "thumelhans@molsheim.fr"
        }
    ],
    "autoload": {
        "psr-4": {
            "App\\": "class"
        }
    },
    "require": {
        "altorouter/altorouter": "^2.0"
    }
}

Mon architecture de fichier (WIP)

|Public
|-home.php
|Router
|src
|-|class
|-Database.php
|-|css
|-|img
|vendor
composer.json
composer.lock
composer.phar
readme.md

Merci d'avance pour votre aide.

4 réponses


Curvata
Réponse acceptée

Tu dois mettre un use AltoRouter; en haut de ton fichier juste après le require 'vendor/autoload.php';

Normalement, tu dois mettre les fichiers css et les images dans le dossier "public" et dans "src" tu mets ton application. Donc, pour le namespace tu pars sur "App\\": "src".

Merci pour ta réponse, mais quand je mets use Altorouter; il me mets une erreur comme quoi il n'a pas de compound. Et si je mets vendor\AltoRouter; il me dit que la classe n'existe pas. Dois-je rajouter dans l'autoloader le dossier vendor?

Bon, je sais pas comment, mais comme par magie AltoRouter est défini. Pour le dumper de symfony j'ai ajouter use Symfony\VarDumper\VarDumper et dump est défini aussi.
Je n'ai plus aucune erreur.
Merci pour ton aide.

Tu peux mettre une extension pour t'aider à inclure les namespace des classes, moi sur VS code j'utilise "PHP Intelephense".