IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Fatal error: Uncaught Error: Class 'Router\Route' not found in C: routes\Router.php on line 19


Sujet :

Langage PHP

  1. #1
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2017
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2017
    Messages : 38
    Points : 41
    Points
    41
    Par défaut Fatal error: Uncaught Error: Class 'Router\Route' not found in C: routes\Router.php on line 19
    Bonjour à tous. Utilisant la programmation orientée objet et la méthode Mvc afin de professionnaliser mon code, je me retrouve face à un problème qu'il m'est difficile de résoudre.
    Un problème de route apparemment qui fait que lors de l’exécution, il semblerait manquer un fichier.

    Voici l'architecture de mes dossiers.
    Pièce jointe 609603
    composer.json
    Code JavaScript : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    {
        "name": "*******/aaa",
        "authors": [
            {
                "name": "*********",
                "email": "************"
            }
        ],
        "autoload": {
            "psr-4": {
                "Router\\": "routes/",
                "App\\": "app/",
                "Database\\": "database/"
     
            }
        },
        "require": {}
    }

    fichier.htaccess
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    RewriteEngine On
     
    RewriteCond %{REQUEST_FILENAME} !-f
     
    RewriteRule ^(.*)$ public/index.php?url=$1 [QSA,L]
    public/index.php
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    <?php
     
    use Router\Router;
    require '../vendor/autoload.php';
     
     
    define('VIEWS', dirname(__DIR__) . DIRECTORY_SEPARATOR . 'views' . DIRECTORY_SEPARATOR);
    define('SCRIPTS', dirname($_SERVER['SCRIPT_NAME']) . DIRECTORY_SEPARATOR);
     
    $router = new Router($_GET['url']);
     $router->get('/', 'App\Controllers\BlogController@index'); 
     $router->get('/posts/:id', 'BlogController@show'); 
     
     $router->run();
    routes/Route.php
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    <?php
     
    namespace Router;
    namespace App\BlogControllers;
    use Database\DBConnection;
     
     
     
    class Route { 
     
     
    	public $path;
        public $action;
        public $matches;
     
     
    public function __construct($path, $action)
        {
            $this->path = trim($path, '/');
            $this->action = $action;
        }
     
     
     
        public function matches( $url)
        {
            $path = preg_replace('#:([\w]+)#', '([^/]+)', $this->path);
            $pathToMatch = "#^$path$#";
     
            if (preg_match($pathToMatch, $url, $matches)) {
                $this->matches = $matches;
                return true;
            } else {
                return false;
            }
        }
     
     
    public function execute()
        {
            $params = explode('@', $this->action);
            $controller = new $params[0](new DBConnection('blog','localhost','root',''));
            $method = $params[1];
     
            return isset($this->matches[1]) ? $controller->$method($this->matches[1]) : $controller->$method();
        }
     
     
    }
    routes/Router.php
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    <?php
     
    namespace Router;
     
     
    class Router{ 
     
    private $url;
    public $routes = [];
     
     public function __construct($url)
        {
            $this->url = trim($url, '/');
        }
     
     
    public function get( $path,$action)
        {
            $this->routes['GET'][] = new Route($path, $action);
       }
     
     
     
     
        public function run()
        {
            foreach ($this->routes[$_SERVER['REQUEST_METHOD']] as $route) {
                if ($route->matches($this->url)) {
                    return $route->execute();
                }
            }
     
            return header("HTTP/1.0 404 Not found.");
        }
     
     
    }
    Controllers/BlogController
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    <?php
     
    namespace App\Controllers;
     
     
     
    class BlogController extends Controller{ 
     
     
    public function index()
        {
     
        	return $this->view('blog.index');
        }
     
     
     
     
    public function show(int $id)
        {
     
        	return $this->view('blog.show'), compact('id');
        }
     
     
     
     
     
     
    }
    controllers/Controller.php
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    <?php
     
    namespace App\Controllers;
    use Database\DBConnection;
     
     
    class Controller {  
     
     
    protected $db;
     
     
    public function __construct(DBConnection $db)
        {
            $this->db=$db;
            }
     
     
    public function view( $path, array $params = null)
        {
            ob_start();
            $path = str_replace('.', DIRECTORY_SEPARATOR, $path);
            require VIEWS . $path . '.php';
            if($params){
     
                $params=extract($params);
            }
            $content = ob_get_clean();
            require VIEWS . 'layout.php';
        }
     
     
     
     
     
     }

    Merci d'avance pour vos recommandations et réponses.

  2. #2
    Membre émérite
    Avatar de cavo789
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2004
    Messages
    1 756
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 756
    Points : 2 990
    Points
    2 990
    Par défaut
    Bonjour

    Dans ton fichier index.php, sauf erreur (je n'en suis qu'à mon premier café), le require du fichier vendor doit être avant le use. Inverse donc ces deux lignes.

    Note aussi que le namespace doit être le nom du dossier càd que si ton namespace se nomme Router, le dossier doit s'appeler Router (et donc pas "routes"). Quand tu exécutes "composer dump-autoload" logiquement tu devrais voir ce warning.

    Bonne journée
    Christophe (cavo789)
    Mon blog, on y parle Docker, PHP, WSL, Markdown et plein d'autres choses : https://www.avonture.be

Discussions similaires

  1. [1.x] Fatal error: Class 'PDO' not found
    Par phpiste dans le forum Symfony
    Réponses: 5
    Dernier message: 14/07/2010, 12h40
  2. Fatal error: Class SoapServer not found in
    Par l.laurent60 dans le forum XML/XSL et SOAP
    Réponses: 8
    Dernier message: 21/05/2009, 10h12
  3. Fatal error class not found.
    Par billyrose dans le forum Langage
    Réponses: 4
    Dernier message: 23/04/2009, 17h22
  4. [MySQL] Fatal error: Class 'mysqli' not found in site
    Par rashid120 dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 29/07/2008, 08h42
  5. Réponses: 0
    Dernier message: 05/12/2007, 09h09

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo