THELIA Forum

Welcome to the THELIA support and discusssion forum

Announcement

Rejoignez la communauté sur le Discord Thelia : https://discord.gg/YgwpYEE3y3

Offline


un probleme pour l'installation de la 2.5

je pense que j'ai fait la bonne mise a jour avec composer

par contre quand je veux faire la mis e a jour de la base
php setup/update.php

j'ai cette erreur
Propel\Generator\Exception\InvalidArgumentException^ {#2913
  #message: "Invalid database name: no configured connection named `thelia`."
  #code: 0
  #file: "./vendor/thelia/propel/src/Propel/Generator/Config/GeneratorConfig.php"
  #line: 231

c'est pour mettre a jour sur mon ordi en 1er, ma base s'appelle 'base du site" , mais il la trouve pas je pense

ps: il n'y a plus de mise a jour pas le navigateur ?

Offline


regarde ce que tu as comme config à cet endroit : thelia/local/config/database.yml

Offline


j'ai

database:
  connection:
    driver: mysql
    user: root
    password: root
    dsn: mysql:host=127.0.0.1;dbname=thelia du site;port=8889

elle fonctionne avec ma sauvegarde 2.4, mais la mise a jour est pas contente, surtout que ma base ne s'appelle pas "thelia"

Offline


Tu peux essayer un Thelia thelia:install, ou alors mettre à jour le fichier env.local à la racine de ton Thelia :

###> thelia/database-configuration ###
DB_HOST=...
DB_PORT=3306
DB_NAME=...
DB_USER=...
DB_PASSWORD=...
###< thelia/database-configuration ###

Il y a des choses qui sont configurées dans les fichiers .env maintenant.

Voir aussi la doc pour les mises à jour nécessaires des modules : https://doc.thelia.net/docs/update


OpenStudio Toulouse

Offline


Bonjour,
J'ai rencontré le même problème que j'ai résolu comme suit :
Plusieurs modules, qui ont des tables spécifiques dans la base, ont dans leur config un fichier schema.xml. Dans certains modules, le nom de la base est "thelia" et dans la 2.5 , ce nom devient "TheliaMain".
Par exemple le module Catalogue se réfère à thelia
dans thelia/local/modules/Catalogue/Config, j'ai donc modifié le fichier schema.xml
de <database defaultIdMethod="native" name="Thelia"
en <database defaultIdMethod="native" name="TheliaMain"

Offline


Pour une migration d'un module en 2.5, voilà la ckecklist :

  • Remplacer name="thelia" par name="TheliaMain" dans le schema.xml

  • Ajouter dans la classe principale du module le code qui permet d'activer l'autowiring dans les classes de base des modules :

    public static function configureServices(ServicesConfigurator $servicesConfigurator): void
        {
            $servicesConfigurator->load(self::getModuleCode().'\\', __DIR__)
                ->exclude([THELIA_MODULE_DIR.ucfirst(self::getModuleCode()).'/I18n/*'])
                ->autowire(true)
                ->autoconfigure(true);
        }
  • dans les form il te faut declarer les types, ex: 'text' => TextType::class. Attention aux extensions de forms qui peuvent exister dans les listeners...

  • dans tous les controllers, il te faut supprimer les appels aux methodes getDispacther(), getRequest(), getSession(), etc. et utiliser l'autowiring directement dans les méthodes.

  • si tu injectais Request de thelia, tu dois aujourd'hui injecter RequestStack et dans les methodes utiliser $request=$this->requestStack->getCurrentRequest() si tu fais pas ça, tu auras des erreur d'init de session.

  • sur les form, séclarer getName() en static, avec l'identifiant nom qui était déclaré dans le config.xml, ça évitera d'avoir à modifier les templates...

  • Toujours utiliser dans les controleurs $this->createForm(TonForm::getName()); et surtout pas l'instanciation directe. (new xxxForm())

  • Dans les modules, supprimer les répertoires Model\Base et Model\Map

  • Si les hooks ont des dépendances (ex. SécurityContext), les supprimer du <hooks>...</hooks> dans config.xml, les déclarer en services, et appeler le constructeur de BaseHook dans le constructeur :

      class HookManager extends BaseHook
      {
          protected $securityContext;
      
          public function __construct(
              SecurityContext $securityContext,
              SmartyParser $parser,
              AssetResolverInterface $resolver,
              EventDispatcherInterface $eventDispatcher
          ) {
              parent::__construct($parser, $resolver, $eventDispatcher);
              $this->securityContext = $securityContext;
          }
          
          [...]
      }
  • Reprendre tous les appels à la méthode EventDispatcher::dispatch(), les paramètres nom de l'évènement, évènement doivent être inversés, la signature de la méthode à changé. Exemple :

    Thelia 2.4 : $this->dispatcher->dispatch(TheliaEvents::IMAGE_PROCESS, $event);
    Thelia 2.5 : $this->dispatcher->dispatch($event, TheliaEvents::IMAGE_PROCESS);
  • Il n'est plus nécessaire de déclarer dans le config.xml les services, form, commandes, event listeners, plugin smarty. sauf cas particuliers. Supprimer les déclarations de services, Forms, Commands du config.xml, sinon ils pourraient figurer deux fois dans le container, à cause de l'autoconfigure qui les register avec un ID différent.

  • Régénérer les modèles avec un php Thelia module:generate:model NomduModule

  • Régénérer le SQL avec un php Thelia module:generate:sql NomduModule. Attention, le nom du fichier généré est TheliaMain.sql, modifiez votre initialisation du module si nécessaire !


OpenStudio Toulouse

Offline


Bonsoir Roadster,

Merci pour la checklist. Je vais pouvoir envisager la migration de quelques sites et quelques modules vers Thelia 2.5.

Offline


Bonjour
Sur une migration de 2.4 en 2.5.2, lorsque je lance php setup/update.php , j'ai l'erreur suivante :
Fatal error: Uncaught Symfony\Component\DependencyInjection\Exception\RuntimeException: Cannot autowire service "TheliaSmarty\Template\Plugins\Esi": argument "$esiFragmentRenderer" of method "__construct()" references class "Symfony\Component\HttpKernel\Fragment\EsiFragmentRenderer" but no such service exists. in /Volumes/stockage/projets/thelia25_020123/htdocs/vendor/symfony/dependency-injection/Compiler/DefinitionErrorExceptionPass.php:51

Offline


La classe est pourtant bien présente dans
vendor/symfony/http-kernel/Fragment/EsiFragmentRenderer.php

Offline


J'ai trouvé l'origine du problème : le module TheliaSmarty était resté dans son ancienne version

Offline


Les message au dessus sont précieux !
J'ai avancé gràce a eux, une fois que j'ai les modules ok et les front/back ok, je reçois ça quand je met php local/setup/update.php :

$ php local/setup/update.php

You are going to update Thelia from version 2.4.2 to version 2.5.2.

Continue update process ? (Y/n)
y

Would you like to backup the current database before proceeding ? (Y/n)
y
Symfony\Component\ErrorHandler\Error\UndefinedMethodError^ {#2038
  #message: "Attempted to call an undefined method named "rowCount" of class "Propel\Runtime\DataFetcher\PDODataFetcher"."
  #code: 0
  #file: "./vendor/thelia/core/lib/Thelia/Install/Update.php"
  #line: 415
  trace: {
    ./vendor/thelia/core/lib/Thelia/Install/Update.php:415 { …}
    ./vendor/thelia/core/lib/Thelia/Install/Update.php:444 { …}
    ./vendor/thelia/core/lib/Thelia/Install/Update.php:228 { …}
    ./local/setup/update.php:158 {
      › try {
      ›     $update->backupDb();
      ›     cliOutput(sprintf('Your database has been backed up. The sql file : %s', $update->getBackupFile()), 'info');
    }
  }
}

Offline

Offline


merci, en ajoutant le code lié à la PR, cela fonctionne comme attendu.

Quel est le moment le plus judicieux pour effectuer cette commande ?
- une fois que le BO est à peu près d'aplomb
- une fois que tout est d'aplomb, template + modules
- un autre moment

Offline

Offline


Bonjour a tous,
Mise a jour 2.4 vers 2.5.2 voila ce que j'ai en index_dev.php
"""""""""""""""""""""""""
FatalErrorException in PdoConnection.php line 134: Compile Error: Declaration of Propel\Runtime\Connection\PdoConnection::query($statement) must be compatible with PDO::query(string $query, ?int $fetchMode = null, mixed ...$fetchModeArgs)
"""""""""""""""""""""""""
quelqu'un à deja eu ceci ?
Merci par avance

Last edited by chris22 (13-03-2023 12:51:10)


Toujours en forme,
La différence entre le possible et l’impossible, c’est la volonté, et le  temps ...
Oui mais... ça c'est avec la meilleure volonté du Monde,
Et elle est, des fois, difficile à tenir... Thelia 2.4.4

Offline


Ça se passe avec quelle version de PHP ?


OpenStudio Toulouse

Offline


Bonjour Franck
8.0.28


Toujours en forme,
La différence entre le possible et l’impossible, c’est la volonté, et le  temps ...
Oui mais... ça c'est avec la meilleure volonté du Monde,
Et elle est, des fois, difficile à tenir... Thelia 2.4.4

Offline


Bonjour a tous,
Mise a jour 2.4 vers 2.5.2 voila le résultat  que j'ai en index_dev.php
php 8.1.16
Voici
"""""""""""
core\vendor\symfony\config\ResourceCheckerConfigCache.php line 85:
Type error: Too few arguments to function Symfony\Component\Config\ResourceCheckerConfigCache::Symfony\Component\Config\{closure}(), 4 passed in \website\Project2\core\vendor\symfony\config\Resource\FileResource.php on line 21 and exactly 5 expected
"""""""""""
  1/  in ResourceCheckerConfigCache.php line 85
  2/  at ResourceCheckerConfigCache->Symfony\Component\Config\{closure}() in FileResource.php line 21
  3/  at require('\website\Project2\core\vendor\symfony\config\Resource\FileResource.php') in DebugClassLoader.php line 169
  4/  at DebugClassLoader->loadClass()
  5/  at unserialize() in ResourceCheckerConfigCache.php line 94
  6/  at ResourceCheckerConfigCache->isFresh() in ConfigCache.php line 77
  7/ at ConfigCache->isFresh() in PropelInitService.php line 193
  8/  at PropelInitService->buildPropelConfig() in PropelInitService.php line 425
   9/ at PropelInitService->init() in Thelia.php line 212
10/   at Thelia->initializePropelService() in Thelia.php line 163
   11/ at Thelia->boot() in Kernel.php line 180
12/  at Kernel->handle() in index_dev.php line 46
""""""""""""""""""""""""""""""
Ci quelqu'un a deja eu suis preneur
Merci  par avance


Toujours en forme,
La différence entre le possible et l’impossible, c’est la volonté, et le  temps ...
Oui mais... ça c'est avec la meilleure volonté du Monde,
Et elle est, des fois, difficile à tenir... Thelia 2.4.4

Offline


Bonjour a tous,
je reprend la la ckecklist  migration pour que je prenne des repères s'il vous plait
""""""""""""
Ajouter le code qui permet d'activer l'autowiring dans les classes de base des modules :

public static function configureServices(ServicesConfigurator $servicesConfigurator): void
    {
        $servicesConfigurator->load(self::getModuleCode().'\\', __DIR__)
            ->exclude([THELIA_MODULE_DIR.ucfirst(self::getModuleCode()).'/I18n/*'])
            ->autowire(true)
            ->autoconfigure(true);
    }
""""""""""""""
ou se situe les les classes de base des modules
juste un exemple me serait utile pou " theliaSmarty " par exemple


Merci pour votre patience


Toujours en forme,
La différence entre le possible et l’impossible, c’est la volonté, et le  temps ...
Oui mais... ça c'est avec la meilleure volonté du Monde,
Et elle est, des fois, difficile à tenir... Thelia 2.4.4