La POO en PHP, chapitre 19 - TP : Refactoring

Par Nours2806, il y a 5 ans


Bonjour,

Voila je rencontre un petit problème avec mon code.

j'ai une erreur sur "prepare" et sur "query"et sur et je ne comprend pas pourquoi.
Quelqu'un peut-il m'aider.
Merci d'avance.

Voici mon code sur la fonction "core\Table\Table.php :

public function query($statement, $attributes = null, $one = false)
{
    if ($attributes) {
        return $this->db->prepare(
            $statement,
            $attributes,
            str_replace('Table', 'Entity', get_class($this)),
            $one
        );
    } else {
        return $this->db->query(
            $statement,
            str_replace('Table', 'Entity', get_class($this)),
            $one
        );
    }
}

6 réponses

Carouge10, il y a 5 ans

bonjour.
qu'elle est l'erreur complète ?
car suivant l'erreur cela veut sûrement dure que $this->db est null.
as tu activé l'affichage des erreurs de PDO ? ( cf la doc php.net)

Nours2806, il y a 5 ans

Voici l'erreur complète :

E:\wamp64\www\Grafikart\app\App.php
{
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;
}

}

Arguments
"Class '\App\Table\PostTable' not found"

Carouge10, il y a 5 ans

ah oui c'est différent de ce que l'on pourrait croire au premier message.
Donc as-tu bien une classe qui ce nom là dans le dossier /App/Table ?

Nours2806, il y a 5 ans

Oui, mais je me demande si /App/Table c'est pareil que /app/Table avec le "a" de app en minuscule car dans mon arborescence le répertoire c'est "app" et non "App"

Carouge10, il y a 5 ans

a essayer mais je ne suis pas convaincu car il y ira chercher le namespace

Nours2806, il y a 5 ans

bon, ca n'a pas marché.
mais mainteant il me met :
Whoops\Exception\ErrorException thrown with message "Cannot declare class App, because the name is already in use"

Stacktrace:

2 Whoops\Exception\ErrorException in E:\wamp64\www\Grafikart\app\App.php:6

1 Whoops\Run:handleError in E:\wamp64\www\Grafikart\vendor\filp\whoops\src\Whoops\Run.php:408

0 Whoops\Run:handleShutdown in [internal]:0

Voici ma class App :

<?php use Core\Config; use Core\Database\MysqlDatabase; class App { public $title = "Mon super site"; 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; } }