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 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);
        }
  • Il n'est plus nécessaire de déclarer dans le config.xml les services, form, commandes, event listeners, plugin smarty. sauf cas particuliers.

  • 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

  • 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 virer du <hooks>...</hooks>, 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;
          }
          
          [...]
      }

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


Il y a une PR pour ce problème : https://github.com/thelia/thelia/pull/3074


OpenStudio Toulouse

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


Immédiatement.


OpenStudio Toulouse