Bonjour,
Je suis actuellement en train de faire le Tp Refactoring en PHP. J'ai rencontré différents problèmes que j'ai résolu en suivant les aides dans les commentaires ect... Mais là je reste bloquée sur cette erreur sur ma page d'acceuil :
"Fatal error: Uncaught Error: Class '\App\Table\PostTable' not found in C:\laragon\www\Poo\Structure\App\App.php:34 Stack trace: #0 C:\laragon\www\Poo\Structure\public\index.php(21): App->getTable('post') #1 {main} thrown in C:\laragon\www\Poo\Structure\App\App.php on line 34"
Voici la fonction get Table() qui se situe dans la class App:
public function getTable($name){
$class_name= '\\App\\Table\\'.ucfirst($name).'Table';
return new $class_name($this->getDb());
}
Je ne peux pas continuer le tuto avec cette erreur et à force de tester différentes choses, j'ai peur d'avoir casser d'autres points dans mon code (je n'ai plus d'affichage sur mon home hors mis le message d'erreur, alors qu'avant j'avais mes titres ect)
modifier mes autoloaders Core et App, car apparement il y avait un soucis. Je les ai mis ainsi :
Autoloader/Core :
<?php
namespace Core;
class Autoloader {
static function register(){
spl_autoload_register(array(__CLASS__, 'autoload'));
}
// static function autoload($class){
// if(strpos($class, __NAMESPACE__.'\\')=== 0){
// $class= str_replace(__NAMESPACE__.'\\','',$class);
// $class= str_replace('\\','/',$class);
// require ROOT .'\\'.$class.'.php';
// }
// }
static public function autoload($class) {
if (is_file(__NAMESPACE__.'/'.$class.'.php'))
require __NAMESPACE__.'/'.$class.'.php';
}
}
Autoloader/App:
<?php
namespace App;
class Autoloader {
static function register(){
spl_autoload_register(array(__CLASS__, 'autoload'));
}
static function autoload($class){
if(strpos($class, __NAMESPACE__.'\\')=== 0){
$class= str_replace(__NAMESPACE__.'\\','',$class);
$class= str_replace('\\','/',$class);
require __DIR__ .'/'.$class.'.php';
}
}
}
Et ma class App
<?php
use App\Table\PostTable;
use Core\Config;
use Core\Database\MysqlDatabase;
class App{
public $title = "Mon super Blog";
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;
}
}
Est ce que quelqu'un saurait m'aider à me débloquer svp?
Salut,
Voici ma classe PostTable.
Mais j'ai le même soucis si je fais appelle à la Class User ou Category. Et si je remet les autoloaders comme sur la vidéo, j'ai le problème inverse, il ne trouve pas la Class Table dans mon Core.
" Fatal error: Class 'Core\Table\Table' not found in C:\laragon\www\Poo\Structure\app\Table\PostTable.php on line 7 "
<?php
namespace App\Table;
use Core\Table\Table;
class PostTable extends Table{
/**
* récupère les derniers articles
* @return array
*/
public function last(){
return $this->query("
SELECT articles.id, articles.titre, articles.contenu, articles.date, categories.titre as categorie
FROM articles
LEFT JOIN categories ON category_id = categories.id
ORDER BY articles.date DESC
");
}
}