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.
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.
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
);
}
}
}
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)
Core/Table
, qui essaie de faire un new
de table
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