Bonjours je suis apres refaire une mise a jour de mon PHP avec le tutorial suivant
J'ai un probleme de router not found voir erreur

j'ai installé altorouter/altorouter : composer require altorouter/altorouter:1.2.0

mon github avec le projet : https://github.com/MI7QC/bloguePHP

public/index.php
"`
<?php
require '../vendor/autoload.php';

$whoops = new \Whoops\Run;
$whoops->pushHandler(new \Whoops\Handler\PrettyPageHandler);
$whoops->register();

$router = new App\Router(dirname(DIR) . '/views');

$router
->get('/blog', 'post/index', 'blog')
->get('/blog/category', 'category/show', 'category')
->run();

`"

src/Router.php
"`
<?php
namespace App;

class Router {

/*
*@var string 
*/
private $viewPath;

/*
*@var AltoRouter 
*/
private $router;

public function __construct(string $viewPath) 
{
    $this->viewPath = $viewPath;
    $this->router = new \AltoRouter();
}

public function get(string $url, string $view, ?string $name = null): self
{
    $this->router->map('GET', $url, $view, $name);

    return $this;
}

public function run(): self
{
    $match = $this->router->match();
    $view = $match['target'];
    ob_start();
    require $this->viewPath . DIRECTORY_SEPARATOR . $view . '.php';
    $content = ob_get_clean();
    require $this->viewPath . DIRECTORY_SEPARATOR  . 'layouts/default.php';

    return $this;
}

}
`"

composer.json
" { "autoload": { "psr-4": { "App\\": "src/" } }, "require": { "altorouter/altorouter": "1.2.0", "symfony/var-dumper": "^5.2", "filp/whoops": "^2.9" } } "

Ce que je veux

J'aimerais que les route soient fonctionelle quand j'écris http://localhost:8000/blog.

Ce que j'obtiens

j'obtiens une erreur de Class 'App\Router' not found pourtant je relis le code et tout semble bien connecter l'un à lautre.

4 réponses


Hello,

Permière chose dans ton index.php pourquoi tu fais $router = new App\Router(dirname(DIR) . '/views'); au lieu de faire un use App\Router ?
Ensuite as-tu pensé à faire un .htaccess?
Enfin dans ton Router. php pourquoi tu fais $this->router = new \AltoRouter(); au lieu de faire $this->router = new AltoRouter(); ?

Salut,

tu as bien fait composer dump-autoload après la modification de ton "composer.json" ?

Si tu es sur VSCode je t'invite à installer l'extension "PHP Intelephense" pour t'aider à inclure le namespace de tes classes.

MI7QC
Auteur

Merci a vous :) j'ai donc trouvé la solution, j'ai installé "PHP Intelephense" et mon erreur venait "$router = new App\Router(dirname(__DIR__) . '/views');" j'ai du rajouté les underscore de chaque coté de DIR.

pourtant dans la video tutorial il ne fait pas cela et je me dis que PHP avec les années doit avoir évolué.

je n'aie pas créer de fichier .htaccess je me rapelle pas a quoi cela sert....

tout ce qui me vient en tete c'est ceci.

le RewriteBase sert a pointer l'endroit ou se situe le htaccess ?
le RewriteRule sert a pointer le principal index.php ?
RewriteEngine On
RewriteBase ?
RewriteRule ^.*php$ index.php [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ?

Il te parle du .htaccess car si tu veux travailler avec le router il faut que toutes tes requêtes soient dirigées vers ton dossier public.

En développement j'utilise le serveur interne, tu fais php -S localhost:8000 -t public cela permet de mettre ton dossier public en racine.