Bonjour,

Actuellement à l'étape de Refactoring sur le tutoriel POO en PHP, je suis confronté à un problème d'appel sur les autoloader.
Conscient que d'autres sujets existent, j'aimerais comprendre pourquoi j'obtiens une erreur.

Ce que je fais

Mon arborescence a bien été reporté comme sur tutoriel

/Blog/app
/Blog/core

J'ai bien un Autoloader dans app avec le namespace App et un Autoloader dans core avec le namespace Core

Dans le fichier index.php, j'ai le code suivant :

<?php
define('ROOT', dirname(__DIR__));
require ROOT . '/app/App.php'; 

App::load();

  if(isset($_GET['page'])){
    $page  = $_GET['page'];
}else{
    $page ='home';
}
 ob_start();

if($page ==='home'){
    require ROOT . '/pages/articles/home.php';
}
$content = ob_get_clean();
    require ROOT . '/pages/templates/default.php';
?> `

Dans le fichier Autoload.php, j'ai le code suivant :

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

}

Pourtant le code part en erreur et j'obtiens le message suivant :
( ! ) Warning: require(C:\wamp\www\Blog\app/Core/Table/Table.php): failed to open stream: No such file or directory in C:\wamp\www\Blog\app\Autoloader.php on line 24
( ! ) Fatal error: require(): Failed opening required 'C:\wamp\www\Blog\app/Core/Table/Table.php' (include_path='.;C:\php\pear') in C:\wamp\www\Blog\app\Autoloader.php on line 24

Je n'arrive pas a comprendre mon erreur, une petite idée ?
Je suis vraiment bloqué à la 24 minute il tjrs m'afficher le même problème :/

Merci d'avance.

8 réponses


JeremyB
Réponse acceptée

Salut, montre nous ta classe Table.php stp.

SLK
Réponse acceptée

non mais "blogTable" c'était juste pour dire.
Et effectivement je me suis trompé dans le chemin que j'ai donné.
Le fichier qu'il voulait voir c'est : ".../App/Table/Table.php"

J'ai édité mon message précédent,
désolé je ne m'attendais pas à ce que tu répondes tout de suite.

(Si tu peux supprimer le sujet redondant que tu as créé stp. Si c'est possible)

<?php 
namespace Core\Table;
use Core\Database\Database;

class Table{

     protected $table;
     protected $db;

     public function __construct(Database $db){
        $this->db = $db;
        if(is_null($this->table)){
            $parts = explode('\\', get_class($this));
            $class_name = end($parts);
            $this->table = strtolower(str_replace('Table', '', $class_name . 's'));
        }

     }

     public function all(){
        return $this->db->query('SELECT * FROM '.$this->table);

     }

     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,
                $attributes,
                str_replace('Table', 'Entity', get_class($this)),
                $one
            );
        }
     }

}

Ça m'a l'air normal. Et dans ton BlogTable.php ?

Oui mais tjrs il m'affiche le mm problème ,quel BlogTable ??
est t-il possible de vous envoyé le TP et le voir si il n'est pas de problème , j'ai déjà recommencé le tp 2 fois mais tjrs le même problème :/

Salut,

tu as montré CoreTable, maintenant il aimerait voir BlogTable (Blog/App/Table.php).

Pourquoi tu as mis : "Salut, montre nous ta classe Table.php stp." en résolu, et re-créé le même sujet ?

Sinon par rapport à l'erreur :

( ! ) Warning: require(C:\wamp\www\Blog\app/Core/Table/Table.php): failed to open stream

Ça veut dire que quelque part dans un fichier :
1)

  • Soit tu es dans un namespace Core/Table, qui essaie de faire un new de table
  • Soit tu es dans un namespace Core, qui essaie de faire un new de Table\table

2)
Comme l'autoloader est dans le namespace App,
il essaie de charger .../App/Core/... (ce qui n'existe pas).

Ce qui provoque l'erreur c'est qu'il te manque un use Core\Table dans le fichier en question, je pense.
C'est à toi de trouver ce fichier, d'où vient l'erreur.

Essaie de voir ça et dis nous ce qu'il en est.

SALUT ;
en effet , j ss bloqué à la 24 min et il n'est a aucun fichier qui s'appel BlogeTable , à cet racine (Blog/App/Table.php) y-à les classes CategoryTable.php-PostTable.php et userTable.php

Ok pas de problème déjà supprimer :)
merci Bcp de votre réponçe
si vous voulez je peux vous envoyé le tp er le me corrige svp :/ ça reste tjrs le problème et mm je sais pas de vient t il