Bonjour,
Voila je rencontre un petit problème avec mon code, je ne comprends pas pourquoi mais il y a un problème avec mon autoload il essaye de charger ceci: "/app/Core/Table/Table.php", alors que je n'ai pas du tout cette aboresence là...
========================
(Core/Autoloader.php)
<?php
namespace Core;
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);
$class_name = str_replace('\\', '/', $class_name);
require __DIR__.'/'.$class_name.'.php';
}
}
}
?>
(App/Autoloader.php)
<?php
namespace App;
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);
$class_name = str_replace('\\', '/', $class_name);
require __DIR__.'/'.$class_name.'.php';
}
}
}
?>
(App/App.php)
<?php
use Core\Config;
use Core\Database\MysqlDatabase;
class App
{
private static $_instance;
private $db_instance;
public $title = 'Mon super site';
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;
}
}
?>
( ! ) Warning: require(/var/www/whitesmoke/public_html/poo_video/Blog/app/Core/Table/Table.php): failed to open stream: No such file or directory in /var/www/whitesmoke/public_html/poo_video/Blog/app/Autoloader.php on line 15
Call Stack
# Time Memory Function Location
1 0.0003 237872 {main}( ) .../index.php:0
2 0.0008 265016 App->getTable( ) .../index.php:7
3 0.0008 265576 spl_autoload_call ( ) .../index.php:33
4 0.0008 265656 App\Autoloader::autoload( ) .../index.php:33
5 0.0009 267880 require( '/var/www/whitesmoke/public_html/poo_video/Blog/app/Table/ArticlesTable.php' ) .../Autoloader.php:15
6 0.0009 268136 spl_autoload_call ( ) .../Autoloader.php:7
7 0.0009 268176 App\Autoloader::autoload( ) .../Autoloader.php:7
( ! ) Fatal error: require(): Failed opening required '/var/www/whitesmoke/public_html/poo_video/Blog/app/Core/Table/Table.php' (include_path='.:/usr/share/pear:/usr/share/php') in /var/www/whitesmoke/public_html/poo_video/Blog/app/Autoloader.php on line 15
Call Stack
# Time Memory Function Location
1 0.0003 237872 {main}( ) .../index.php:0
2 0.0008 265016 App->getTable( ) .../index.php:7
3 0.0008 265576 spl_autoload_call ( ) .../index.php:33
4 0.0008 265656 App\Autoloader::autoload( ) .../index.php:33
5 0.0009 267880 require( '/var/www/whitesmoke/public_html/poo_video/Blog/app/Table/ArticlesTable.php' ) .../Autoloader.php:15
6 0.0009 268136 spl_autoload_call ( ) .../Autoloader.php:7
7 0.0009 268176 App\Autoloader::autoload( ) .../Autoloader.php:7
cela fait quelques heures que je bloque dessus :( si vous saviez m'aider ça serait vraiment magnifique ! Merci d'avance :)
Hey ! J'ai eu exactement le même problème et en cherchant sur le forum et en combinant un peu toutes les solutions, j'ai réussi à le résoudre, voici mon code :3
Autoloader de app
namespace App;
class autoloader{
public static function register(){
spl_autoload_register(array(__CLASS__, 'autoload'));
}
public static function autoload($class){
if(strpos($class, __NAMESPACE__ . '\\') === 0){
$class = str_replace( __NAMESPACE__ . '\\', '', $class);
$class = str_replace('\\', '/', $class);
require $class . '.php';
}
}
}
Autoloader de core
namespace Core;
class Autoloader{
public static function register(){
spl_autoload_register(array(__CLASS__, 'autoload'));
}
public static function autoload($class){
if(strpos($class, __NAMESPACE__ . '\\') === 0){
$class = str_replace( __NAMESPACE__ . '\\', '', $class);
$class = str_replace('\\', '/', $class);
require $class . '.php';
}
}
}
Voilà, dis moi si ça fonctionne pour toi, je suis pas très douée en PHP donc je sais pas comment t'expliquer ce qui n'allait pas :/
Bonjour,
selon le mesage d'erreur que tu reçois,
(" ! ) Warning: require(/var/www/whitesmoke/public_html/poo_video/Blog/app/Core/Table/Table.php): failed to open stream: No such file or directory in /var/www/whitesmoke/public_html/poo_video/Blog/app/Autoloader.php on line 15 "
Je pense que ton problème vient de ta méthode getTable dans ta class App. En effet tu dois avoir un dossier Tables au sein de ton dossier app qui contient lui aussi un dossier Table et tu n'y fait psa référence dans la méthode
Ta méthode:
public function getTable($name)
{
$class_name = '\App\Table\'.ucfirst($name).'Table';
return new $class_name($this->getDb());
}
Correction
public function getTable($name){
$class_name = '\App\Tables\Table\' . ucfirst($name) . 'Table';
return new $class_name($this->getDb());
}
De plus évite les == et remplace les par ===. C'est une vérification stricte plus poussée
Ton code
if(strpos($class_name, __NAMESPACE__.'\\') == 0)
Correction
if(strpos($class_name, __NAMESPACE__.'\\') === 0)
N'hésites pas si tu as besoin
cordialement
Bonjour.
Il y a une chose que je ne comprend pas, pourquoi faire deux autoloader dans la même application ?
Un seul devrait suffire.
Merci à Shady Ladow et Alain9034 pour vos réponses, ceci m'a permis de régler mon problème et d'en apprendre encore un peu plus :)