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


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)

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"

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 ?

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"

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

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;
    }
}