en fait, j'utilise des namespaces et un autoloader pour charger toutes les classes dont j'ai besoin.
Quand j'essaie de créer une nouvelle instance de la classe 'PostTable', je reçois l'erreur suivante :
<<
PHP Fatal error: Uncaught Error: Class 'C:\Users\Affin-IT\PhpstormProjects\Blog2\app\classe\table\PostTable' not found in C:\Users\Affin-IT\PhpstormProjects\Blog2\app\classe\Appl.php:52
>>
Voici le code de la classe PostTable : cette classe se trouve dans le répertoire app\classe\table
Code : Tout sélectionner
<?php
namespace App\Classe\Table;
use Core\Table\Table;
class PostTable extends Table
{
protected $table = 'articles';
/**
* Récupère les derniers posts
* @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"
);
}
/**
* Récupère un article en liant les catégories associées
* @param $id int
* @return \App\Classe\Entity\PostEntity
*/
public function find($id)
{
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
WHERE articles.id = ?", [$id], true);
}
/**
* Récupère les derniers articles de la catégorie demandée
* @param $category_id int
* @return array
*/
public function lastByCategory($category_id)
{
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
WHERE articles.category_id = ?
ORDER BY articles.date DESC", [$category_id]
);
}
}
?>
Code : Tout sélectionner
<?php
namespace App\Classe;
use Core\Config;
use Core\Database\MysqlDatabase;
class Appl
{
public $title = "Mon Super Site";
private $db_instance;
private static $_instance;
public static function getInstance()
{
if (is_null(self::$_instance))
self::$_instance = new Appl();
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 = ROOT . '\\app\\classe\\table\\' . ucfirst($name) . 'Table';
return new $class_name($this->getDb());
}
public function getDb()
{
$config = Config::getInstance(ROOT . '\core\config\config.php');
if (is_null($this->db_instance))
{
$this->db_instance = new Database\MysqlDatabase(
$config->get('db_name'),
$config->get('db_user'),
$config->get('db_password'),
$config->get('db_host')
);
}
return $this->db_instance;
}
public function forbidden()
{
header('HTTP/1.0 403 Forbidden');
die('Accès interdit !!!');
}
public function notFound()
{
header('HTTP/1.0 404 Not Found');
die('Page introuvable !!!');
}
}
?>
Code : Tout sélectionner
<?php
namespace App\Classe;
class Autoloader {
static function register()
{
spl_autoload_register(array(__CLASS__, 'autoload'));
}
/**
* @param $class_name
*/
static function autoload($class_name)
{
if (strpos($class_name, __NAMESPACE__ . '\\') === 0)
{
$class_name = str_replace(__NAMESPACE__ . '\\', '', $class_name);
// Remplacer les anti-slashes par des slashes si je travaille sous UNIX
//$class_name = str_replace('\\', '/', $class_name);
require ROOT . '\\app\\classe\\' . $class_name . '.php';
}
}
}
?>
Code : Tout sélectionner
<?php
define('ROOT', dirname(__DIR__));
require ROOT . '\app\classe\Autoloader.php';
use \App\Classe\Autoloader;
Autoloader::register();
use \App\Classe\Appl;
$app = Appl::getInstance();
if (isset($_GET['p']))
{
$p = $_GET['p'];
}
else
{
$p = 'home';
}
?>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0">
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"/>
<meta name="format-detection" content="telephone=no">
<body>
<?php
ob_start();
if ($p === 'home')
{
echo require ROOT . '\pages\posts\home.php';
}
elseif ($p === 'posts.category')
{
require ROOT . '\pages\posts\hcategory.php';
}
elseif ($p === 'posts.show')
{
require ROOT . '\pages\posts\hshow.php';
}
$content = ob_get_clean();
require ROOT . '\pages\templates\default.php';
?>
</body>
</html>
Merci d'avance
Bonne soirée
Thierry