par
thirt05 » 15 déc. 2018, 20:23
Bonjour à vous,
je me permets de vous contacter car je n'arrive pas à trouver la solution à mon problème.
En fait, j'utilise entre autre les namespaces ainsi qu'un autoloader pour charger les différentes classes dont j'ai besoin.
Les classes "Autoloader" et "Appl" se trouve dans le répertoire "app\classe".
Quand je charge ma page index.php qui se trouve dans le répertoire "publics", je reçois l'erreur suivante :
<<
PHP Fatal error: Uncaught Error: Class 'App\Classe\Appl' not found in C:\Users\Affin-IT\PhpstormProjects\Blog2\publics\index.php:14
Stack trace:
#0 {main}
thrown in C:\Users\Affin-IT\PhpstormProjects\Blog2\publics\index.php on line 14
Process finished with exit code 255
>>
Il bloque sur l'instruction : Appl::getInstance();
Il n'arrive pas à trouver ma classe "Appl".
Voici le code des différentes pages :
index.php :
Code : Tout sélectionner
<?php
define('ROOT', dirname(__DIR__));
use \App\Classe\Autoloader;
use \App\Classe\Appl;
require ROOT . '\app\classe\Autoloader.php';
Autoloader::register();
require ROOT . '\app\classe\Appl.php';
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>
Autoloader.php :
Code : Tout sélectionner
<?php
namespace App\Classe;
class Autoloader {
static function register()
{
spl_autoload_register(array(__CLASS__, 'autoload'));
}
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 '..\\app\\classe\\' . $class_name . '.php';
}
}
}
?>
Appl.php :
Code : Tout sélectionner
<?
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)
{
$classe_name = '\\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;
}
}
?>
Avez-vous une idée du problème ?
Merci d'avance
Bonne soirée
Thierry
Bonjour à vous,
je me permets de vous contacter car je n'arrive pas à trouver la solution à mon problème.
En fait, j'utilise entre autre les namespaces ainsi qu'un autoloader pour charger les différentes classes dont j'ai besoin.
Les classes "Autoloader" et "Appl" se trouve dans le répertoire "app\classe".
Quand je charge ma page index.php qui se trouve dans le répertoire "publics", je reçois l'erreur suivante :
<<
PHP Fatal error: Uncaught Error: Class 'App\Classe\Appl' not found in C:\Users\Affin-IT\PhpstormProjects\Blog2\publics\index.php:14
Stack trace:
#0 {main}
thrown in C:\Users\Affin-IT\PhpstormProjects\Blog2\publics\index.php on line 14
Process finished with exit code 255
>>
Il bloque sur l'instruction : Appl::getInstance();
Il n'arrive pas à trouver ma classe "Appl".
Voici le code des différentes pages :
index.php :
[code]
<?php
define('ROOT', dirname(__DIR__));
use \App\Classe\Autoloader;
use \App\Classe\Appl;
require ROOT . '\app\classe\Autoloader.php';
Autoloader::register();
require ROOT . '\app\classe\Appl.php';
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>
[/code]
Autoloader.php :
[code]
<?php
namespace App\Classe;
class Autoloader {
static function register()
{
spl_autoload_register(array(__CLASS__, 'autoload'));
}
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 '..\\app\\classe\\' . $class_name . '.php';
}
}
}
?>
[/code]
Appl.php :
[code]
<?
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)
{
$classe_name = '\\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;
}
}
?>
[/code]
Avez-vous une idée du problème ?
Merci d'avance
Bonne soirée
Thierry