«Cannot declare class» en un override de módulo de PrestaShop
Un override de ps_emailalerts mal nombrado tumbó la tienda, y el error siguió al borrarlo. Cómo se nombran los overrides de módulos y por qué la culpable era la caché del hosting.
Un compañero creó un override del módulo de alertas por correo (ps_emailalerts) y la tienda empezó a dar este error:
Fatal error: Cannot declare class Ps_EmailAlerts, because the name is already
in use in /override/modules/ps_emailalerts/ps_emailalerts.php on line 3
Borró el fichero, vació la caché de PrestaShop… y el error seguía ahí. Hubo dos problemas, y el segundo es el que hace perder la tarde.
1. El nombre de la clase del override estaba mal
Los overrides de clases del núcleo y los de módulos se nombran distinto:
| Qué sobrescribes | Fichero | Clase |
|---|---|---|
| Una clase del núcleo | override/classes/Product.php | class Product extends ProductCore |
| Un módulo | override/modules/ps_emailalerts/ps_emailalerts.php | class Ps_EmailAlertsOverride extends Ps_EmailAlerts |
Con un módulo no existe la clase …Core. Si declaras otra vez Ps_EmailAlerts, PHP la encuentra ya cargada (es la del propio módulo) y se para con el error.
2. Al borrar el fichero, el error seguía: caché del hosting
Si borras o corriges el override y la tienda sigue mostrando el mismo error, lo que estás viendo no es tu código actual. Por orden:
- Caché de PrestaShop: Parámetros avanzados → Rendimiento → Borrar la caché, o borra a mano el contenido de
var/cache/prodyvar/cache/dev. - OPcache de PHP: guarda los ficheros PHP ya compilados. Se vacía reiniciando PHP desde el panel del hosting.
- Caché del propio hosting. En este caso era esta: el SuperCacher de SiteGround. Otros hostings tienen la suya (LiteSpeed, Varnish, NGINX cache). Se vacía desde el panel del hosting, no desde PrestaShop.
El compañero no tenía acceso al panel del hosting de su cliente: en cuanto el cliente vació la caché de SiteGround, todo funcionó.
Si usas un script en la raíz de la tienda para vaciar cachés, bórralo al terminar. Un fichero así, accesible desde el navegador y sin protección, deja a cualquiera vaciar tu caché cuando quiera.
¿Te has atascado con un override o con una caché que no se vacía? En Rekire lo resolvemos dentro de nuestros bonos de horas. → Contacto
Esto salió en @PrestashopEsp, la mayor comunidad PrestaShop de España en Telegram. Ver la conversación