Bonjour,
Je suis actuellement en train de faire le Tp Refactoring en PHP. J'ai rencontré différents problèmes que j'ai résolu en suivant les aides dans les commentaires ect... Mais là je reste bloquée sur cette erreur sur ma page d'acceuil :

"Fatal error: Uncaught Error: Class '\App\Table\PostTable' not found in C:\laragon\www\Poo\Structure\App\App.php:34 Stack trace: #0 C:\laragon\www\Poo\Structure\public\index.php(21): App->getTable('post') #1 {main} thrown in C:\laragon\www\Poo\Structure\App\App.php on line 34"

Voici la fonction get Table() qui se situe dans la class App:

    public function getTable($name){
        $class_name= '\\App\\Table\\'.ucfirst($name).'Table';
        return new $class_name($this->getDb());

    }

Je ne peux pas continuer le tuto avec cette erreur et à force de tester différentes choses, j'ai peur d'avoir casser d'autres points dans mon code (je n'ai plus d'affichage sur mon home hors mis le message d'erreur, alors qu'avant j'avais mes titres ect)

  • j'ai vérifier les chemins, les namespaces, renomé avec des majuscules.
  • j'ai lu tous les commentaires liés à cette erreur
  • modifier mes autoloaders Core et App, car apparement il y avait un soucis. Je les ai mis ainsi :

    Autoloader/Core :

<?php

    namespace Core;

    class Autoloader {

        static function register(){
            spl_autoload_register(array(__CLASS__, 'autoload'));
        }

        // static function autoload($class){

        //     if(strpos($class, __NAMESPACE__.'\\')=== 0){
        //         $class= str_replace(__NAMESPACE__.'\\','',$class);
        //         $class= str_replace('\\','/',$class);
        //         require ROOT .'\\'.$class.'.php';
        //     }
        // }

        static public function autoload($class) {
            if (is_file(__NAMESPACE__.'/'.$class.'.php'))
            require __NAMESPACE__.'/'.$class.'.php';
        }
    }

Autoloader/App:

<?php

    namespace App;

    class Autoloader {

        static function register(){
            spl_autoload_register(array(__CLASS__, 'autoload'));
        }

        static function autoload($class){

            if(strpos($class, __NAMESPACE__.'\\')=== 0){
                $class= str_replace(__NAMESPACE__.'\\','',$class);
                $class= str_replace('\\','/',$class);
                require __DIR__ .'/'.$class.'.php';
            }
        }
    }

Et ma class App

<?php

use App\Table\PostTable;
use Core\Config;
use Core\Database\MysqlDatabase;

class App{

    public $title = "Mon super Blog";
    private $db_instance;
    private static $_instance;

    public static function getInstance(){
        if(is_null(self::$_instance)){
            self::$_instance = new App();
        }
        return self::$_instance;

    }

    public static function load(){
        session_start();
        // require ROOT.'/app/Autoloader.php';
        // app\Autoloader::register();

        require ROOT.'/core/Autoloader.php';
        Core\Autoloader::register();
    }

    public function getTable($name){
        $class_name= '\\App\\Table\\'.ucfirst($name).'Table';
        return new $class_name($this->getDb());

    }

    public function getDb(){
        $config = Config::getInstance( ROOT . '/config/config.php' );

        if(is_null($this->db_instance)){
            $this->db_instance = new MysqlDatabase($config->get('db_name'),$config->get('db_user'),$config->get('db_pass'),$config->get('db_host'));
        }
        return $this->db_instance;
    }
 }

Est ce que quelqu'un saurait m'aider à me débloquer svp?

2 réponses


Salut, fais voir le namespace de ta classe PostTable ?

Shil
Auteur

Salut,

Voici ma classe PostTable.
Mais j'ai le même soucis si je fais appelle à la Class User ou Category. Et si je remet les autoloaders comme sur la vidéo, j'ai le problème inverse, il ne trouve pas la Class Table dans mon Core.
" Fatal error: Class 'Core\Table\Table' not found in C:\laragon\www\Poo\Structure\app\Table\PostTable.php on line 7 "

<?php 

namespace App\Table;

use Core\Table\Table;

class PostTable extends Table{

/**
 * récupère les derniers articles
 * @return array
 */

    public function last(){
        return $this->query("
            SELECT articles.id, articles.titre, articles.contenu, articles.date, categories.titre as categorie
            FROM articles
            LEFT JOIN categories ON category_id = categories.id
            ORDER BY articles.date DESC
        ");

    }

}