Bonjour à tous,
Je suis en pleine migration d’un script PHP placé à la racine du site vers Joomla 5.3.0 sur un serveur PHP 8.2, et je bute sur un problème persistant :
L’appel :
génère systématiquement l’exception :
Voici le script que j’utilise actuellement (placé à la racine du site) :
Questions :
L’autoloader PSR-4 de Joomla 5.3.0 a-t-il changé de configuration ?
Y a-t-il un ordre d’initialisation ou une astuce sous PHP 8.2 pour que Joomla\CMS\Factory soit bien résolu ?
Avez-vous déjà rencontré ce “White Screen of Death” lié à Factory non chargé, et quelle solution a fonctionné pour vous ?
Merci beaucoup pour vos retours ! Toute piste de debug ou fragment de configuration sera précieux.
Bonne journée !
— Un développeur motivé, mais un peu perdu.
Je suis en pleine migration d’un script PHP placé à la racine du site vers Joomla 5.3.0 sur un serveur PHP 8.2, et je bute sur un problème persistant :
L’appel :
Code PHP:
Factory::getApplication('site')->initialise();
génère systématiquement l’exception :
Code:
Failed to start application at Joomla\CMS\Factory::getApplication()
- J’ai activé l’affichage des erreurs, vérifié que JPATH_BASE pointe bien vers la racine de l’installation et même tenté de charger manuellement le fichier vendor/autoload.php, mais la classe Joomla\CMS\Factory reste introuvable.
- J’ai trouvé des sources proposant de déclarer le namespace Factory avant de définir _JEXEC, ce qui aurait apparemment corrigé le problème pour certains, mais sans effet chez moi.
Voici le script que j’utilise actuellement (placé à la racine du site) :
Code PHP:
<?php
require_once 'fpdf.php';
include_once 'connexion_db.php';
try {
// 1) Définissez JPATH_BASE si ce n'est pas déjà fait
define('JPATH_BASE', '/XXX');
// 2) Enregistrez un autoloader PSR-4 pour Joomla\CMS
spl_autoload_register(function($class){
$prefix = 'Joomla\\CMS\\';
$baseDir = JPATH_BASE . '/libraries/src/';
$len = strlen($prefix);
// Si la classe n’appartient pas à Joomla\CMS, on passe
if (strncmp($prefix, $class, $len) !== 0) {
return;
}
// Raccourci : transforme Joomla\CMS\Foo\Bar en Foo/Bar.php
$relativeClass = substr($class, $len);
$file = $baseDir . str_replace('\\', '/', $relativeClass) . '.php';
if (file_exists($file)) {
require_once $file;
}
});
/* LE PROBLEME SE SITUE A LA DECLARATION DE CE NAMESPACE */
// 3) Maintenant vous pouvez
use Joomla\CMS\Factory;
// Récupère l’instance de l’application (site ou administrator)
$app = Factory::getApplication();
// Récupère l’objet UserIdentity
$identity = $app->getIdentity();
// Test de récupération de l'utilisateur connecté
// Si l’ID de l’utilisateur est > 0, c’est qu’il est connecté
if ($identity->getId() > 0) {
// Utilisateur connecté
echo 'Bonjour ' . $identity->getUser()->get('name');
die();
} else {
// Visiteur anonyme
echo 'Vous n’êtes pas connecté';
die();
}
} catch (\Throwable $e) {
// Tout problème dans le bootstrap sera affiché ici
echo '<h1>Erreur durant le bootstrap de Joomla</h1>';
echo '<pre>' . $e . '</pre>';
exit;
}
/**
* Initialise l'environnement Joomla
*/
function initializeJoomla() {
define('_JEXEC', 1);
define('DS', '/');
//define('JPATH_BASE', $_SERVER['DOCUMENT_ROOT']);
require_once(JPATH_BASE . DS . 'includes' . DS . 'defines.php');
require_once(JPATH_BASE . DS . 'includes' . DS . 'framework.php');
// Instantiate the application.
$container = \Joomla\CMS\Factory::getContainer();
$container->alias('session.web', 'session.web.site')
->alias('session', 'session.web.site')
->alias('JSession', 'session.web.site')
->alias(\Joomla\CMS\Session\Session::class, 'session.web.site')
->alias(\Joomla\Session\Session::class, 'session.web.site')
->alias(\Joomla\Session\SessionInterface::class, 'session.web.site');
$app = $container->get(\Joomla\CMS\Application\SiteApplication::class);
jimport('joomla.user.user');
jimport('joomla.session.session');
jimport('joomla.user.authentication');
}
initializeJoomla();
Questions :
L’autoloader PSR-4 de Joomla 5.3.0 a-t-il changé de configuration ?
Y a-t-il un ordre d’initialisation ou une astuce sous PHP 8.2 pour que Joomla\CMS\Factory soit bien résolu ?
Avez-vous déjà rencontré ce “White Screen of Death” lié à Factory non chargé, et quelle solution a fonctionné pour vous ?
Merci beaucoup pour vos retours ! Toute piste de debug ou fragment de configuration sera précieux.
Bonne journée !
— Un développeur motivé, mais un peu perdu.
Commentaire