Jump to content

Erreur 500. Log PHP Fatal error:  Uncaught Error Class 'Gender' not found /FrontController.php:1646


Recommended Posts

Bonjour à tous,

Travaillant sur une nouvelle installation de Prestashop 8.1.1, tout fonctionnait bien jusqu'à récemment.

Actuellement, la page d'accueil du site retourne une erreur 500.
En revanche, le backend fontionne correctement.

Lorsque je consulte de fichier de log des erreurs PHP, le backtrace semble indiquer que le problème survient à la ligne 1646 du FrontController.php, un fichier que je n'ai pas modifié. Cette ligne est: 

        $cust['gender'] = $this->objectPresenter->present(new Gender($cust['id_gender']));

Curieusement, le problème semble lié au genre (masculin / féminin) d'un client.
La boutique est en cours de construction et n'a encore aucun client, hormis un client fictif anonyme créé par défaut lors de l'installation.

L'installation a été réalisée avec le strict minimum en terme de modules ; les modules officiels pour paiement par PayPal, paiement en espèces et par virement bancaire ont été ajoutés/activés après l'installation, mais n'avaient posé aucun problème.

Voici la dernière erreur dans le fichier de log:

PHP Fatal error:  Uncaught Error: Class 'Gender' not found in /home/domaine/public_html/classes/controller/FrontController.php:1646
Stack trace:
#0 /home/domaine/public_html/classes/controller/FrontController.php(503): FrontControllerCore->getTemplateVarCustomer()
#1 /home/domaine/public_html/classes/controller/FrontController.php(569): FrontControllerCore->assignGeneralPurposeVariables()
#2 /home/domaine/public_html/controllers/front/IndexController.php(38): FrontControllerCore->initContent()
#3 /home/domaine/public_html/classes/controller/Controller.php(319): IndexControllerCore->initContent()
#4 /home/domaine/public_html/classes/Dispatcher.php(510): ControllerCore->run()
#5 /home/domaine/public_html/index.php(28): DispatcherCore->dispatch()
#6 {main}
  thrown in /home/domaine/public_html/classes/controller/FrontController.php on line 1646

Voici les caractéristiques technique de ma boutique :

Type d’installation : nouvelle
Version de Prestashop : 8.1.1
Thème : par défaut
Code : Original. Des modifications avaient été apportées à Dispatcher.php et Link.php,
            mais version originale de ces fichiers rétablies depuis.
Boutique multilingue.  (La redirection vers le dossier de la 1ère langue fonctionne. Le .htaccess n'a pas été modifié.)
Hébergement : mutualisé chez Hobohost.com, avec cPanel
Version de PHP : 7.1.33
Version de MySQL : 7.4.33
PDO mysql Client API version: 3.3.6
Navigateur(s) concerné(s) : Brave 1.47.186 (affiche l'erreur 500), Firefox 115.3.1esr 64-bit (affiche une page blanche)

Le cache a bien entendu été vidé.

J'ai également tenté un basculement en mode debug.
Une erreur liée au "Gender" (genre) a également été affichée dans le backend.

Je ne parviens pas à trouver d'où vient le problème. Un grand merci pour votre aide.
Je n'ai pas testé une mise à jour vers la toute dernière version 8.1.2.

Link to comment
Share on other sites

Il y a 3 heures, wepresta a dit :

Bonjour,

Je vous conseil de télécharger une version "Stable" de PrestaShop pour le moment.

Les voici : https://www.johanncorbel.fr/versions-de-prestashop/

Bonjour,

cette liste ne correspond pas aux versions réellement stables, juste les versions sable en termes de numéro et de test à la différence des release ou des beta.

C'est juste que la liste n'est pas à jour.

Donc la 8.1.1 est considéré comme stable au même titre que la 8.1.0 ou la 8.0.4 ou même la 8.1.2 qui vient de sortir.

Link to comment
Share on other sites

27 minutes ago, Mediacom87 said:

Bonjour,

cette liste ne correspond pas aux versions réellement stables, juste les versions sable en termes de numéro et de test à la différence des release ou des beta.

C'est juste que la liste n'est pas à jour.

Donc la 8.1.1 est considéré comme stable au même titre que la 8.1.0 ou la 8.0.4 ou même la 8.1.2 qui vient de sortir.

Ok merci je savais pas :) 

Link to comment
Share on other sites

Merci à vous tous.

Mea culpa quant à la version de PHP : il s'agissait de la 7.4.33 qui est bien compatible (et non de la 7.1.33).
Merci à Mediacom87 pour le lien vers la table de compatibilté.

---

Je pars du principe que les dernières versions mineures sont a priori plus stables que les précédentes, puisqu'elles fixent généralement des bugs, voire des failles de sécurité. Un rapide coup d'oeil à la liste des changements permet d'ailleurs de s'en assurer.

Bien entendu, chaque version présente un risque de nouvelles erreurs, mais avec les versions mineures x.Y.z, voire x.y.Z  (où la lettre majuscule représente le changement), on est plutôt dans l'amélioration, la stabilisation et non sur de gros changements avec leurs erreurs de jeunesse.

Je reste sur du PHP 7, après avoir que Prestashop (ou certains modules) présentai(en)t encore récemment quelques problèmes de compatibilité avec PHP 8.

----

Après avoir sauvegardé le site et sa base de données, j'ai finalement choisi de partir sur un installation à neuf de la toute dernière version Prestashop 8.1.2.
J'ai ensuite importé les fichiers, notamment les images, et inséré dans les tables les enregistrements de la base exportée préalablement.

Cela s'est bien passé, et tout refonctionne.

----

Il y a quand même eu quelques petits bémols :

1. Etant en Suisse, Prestashop 8.1.2 a décidé de s'installer en multilingue, avec deux autres langues nationales (allemand, italien) en plus de celle choisie (français).
Pour de petits commerçants, ce n'est pas forcément judicieux en raison du travail de traduction des produits que cela implique, sans compter que seul un faible pourcentage des non italophones apprend l'italien à l'école. Il ne me semble pas avoir manqué une option (monolingue vs multilingue) lors de l'installation.

2. Ma boutique étant trilingue (français / allemand / anglais), il m'a donc fallu remplacer les traductions (français / allemand / italien) à partir de celles sauvegardées.
Les trois tables suivantes ne permettaient pas l'insertion des traductions par des requêtes SQL "INSERT INTO ..." : 

`pres_order_return_state_lang`, `pres_supply_order_state_lang`, `pres_tab_lang`

En effet, la clé primaire (PRIMARY KEY) de ces tables empêche l'insertion des enregistrements, car il a immanquablement des doublons sur la clé primaire.
La clé primaire a certainement été créée pour permettre l'édition des enregistrements de ces tables dans phpMyAdmin, mais la manière dont ceci est implémenté est maladroite. Il faudrait en effet créer une colonne supplémentaire "id" pour assurer cette fonction de clé primaire.

Pour les deux premières tables, j'ai procédé à l'édition directe dans celle-ci avec phpMyAdmin.
Pour la troisième, je suis passé par une destruction de la table, avant de la créer à nouveau (CREATE TABLE).
Je n'ai pas recréé la clé primaire pour l'instant (ALTER TABLE ...).
En tous les cas, lors d'une sauvegarde, il est recommandé que celle-ci soit complète (structure + données).

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...