formation php poo chap 12 tp

Par Vincent Toudic, il y a 9 ans


Bonjour,

je rencontre un probleme sur le tp php poo, je cherche et j'arrive pas à trouver mon erreur :(.

Warning: require(D:\workspace\Blog\app/Database.php): failed to open stream: No such file or directory in D:\workspace\Blog\app\Autoloader.php on line 24

Fatal error: require(): Failed opening required 'D:\workspace\Blog\app/Database.php' (include_path='.;C:\php\pear') in D:\workspace\Blog\app\Autoloader.php on line 24

Ce que je fais

<?php

namespace App;

use \PDO ;

class Database{

private $db_name;
private $db_user;
private $db_pass;
private $db_host;
private $pdo;

public function __construct ($db_name,$db_user ='root',$db_pass = '',$db_host = 'localhost'){

    $this->db_name = $db_name;
    $this->db_user = $db_user;
    $this->db_pass = $db_pass;
    $this->db_host = $db_host;

}

private function getPDO(){

    if($this->pdo === null){
        $pdo = new PDO('mysql:dbname=blog;host=localhost','root','');
        $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);  

    this->pdo = $pdo;
    }

    return $this->pdo;
}

public function query($statement){

    $req = $this->getPDO()->query($statement);
    $data = $res->fetchAll(PDO::FETCH_OBJ);
    return $data;

}

}

<?php
namespace App;
/**
* Class Autoloader
* @package Tutoriel
*/
class Autoloader{

/**
 * Enregistre notre autoloader
 */
static function register(){
    spl_autoload_register(array(__CLASS__, 'autoload'));
}

/**
 * Inclue le fichier correspondant à notre classe
 * @param $class string Le nom de la classe à charger
 */
static function autoload($class){
    if (strpos($class, __NAMESPACE__ . '\\') === 0){
        $class = str_replace(__NAMESPACE__ . '\\', '', $class);
        $class = str_replace('\\', '/', $class);
        require __DIR__ . '/' . $class . '.php';
    }
}

}

7 réponses

Kenor, il y a 9 ans

fait simplement un echo de __DIR__ . '/' . $class . '.php' (dans la méthod static "autoload")
et vois ce que ça te retourne. Si le chemin n'est pas le bon, adapte le à ton arborescence.

Vincent Toudic, il y a 9 ans

ça me renvoie :
D:\workspace\Blog\app/Database.php
Fatal error: Class 'App\Database' not found in D:\workspace\Blog\public\index.php on line 17

<?php

require '../app/Autoloader.php';
App\Autoloader::register();

if(isset($_GET['p'])){

$p = $_GET['p'];

} else {

$p = 'home';

}

//initialisation des obj.
$db = new App\Database('blog');

ob_start();

if($p === 'home'){

require '../pages/home.php' ;
}elseif ($p === 'single'){

require '../pages/single.php' ;
}

$content = ob_get_clean();
require '../pages/templates/default.php';
Vincent Toudic, il y a 9 ans

je suis toujours bloquer :s

Kenor, il y a 9 ans

essai de commenter la ligne : $class = str_replace('\\', '/', $class);

Vincent Toudic, il y a 9 ans

c'est bon j'ai trouvé faute de frappe sur le fichier Database en datebase du coup quand je charge le nom de la classe , il trouve pas de fichier correspondant .

tu ne pouvais pas le trouver car j'etais le seul à voir larborescence :)

Kenor, il y a 9 ans

Oui, c'est ce que j'allais te dire, à part te donner des indices, ce genre d'erreur, il y a que toi qui peut les régler ;)