TP : Refactoring : Problème autoloader

Par Abdelouahed Sdl, il y a 9 ans


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, il y a 9 ans

Salut, montre nous ta classe Table.php stp.

Abdelouahed Sdl, il y a 9 ans
<?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 ); } } }
JeremyB, il y a 9 ans

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

Abdelouahed Sdl, il y a 9 ans

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 :/

SLK, il y a 9 ans

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.

Abdelouahed Sdl, il y a 9 ans

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

SLK, il y a 9 ans

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)

Abdelouahed Sdl, il y a 9 ans

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