====== Mise à jour d'un projet Symfony ====== Au moment où j'écris cette page, nous sommes en train de mettre à jour tous les projets du GInfo vers des version plus récentes. | **Date** | **Symfony** | **PHP** | **Composer** | **Node** | | Age de Rom - 2022 | 4.4 | 7.2 | 1 | 12 | | 2022 - ? | 5.4 | 8 | 2 | 16 | Pensez à faire vos modifications sur cette branche au risque de casser tout le projet ! ===== 1. La partie Back-end ===== Commencer par supprimmer le fichier ''composer.lock'' ainsi que les dossiers ''vendor'' et ''var''. Vérifier que vous avez la bonne versions de PHP et Composer ! L'idée est de mettre à jour tous les packages de composer pour qu'ils soient viables avec les nouvelles versions. Dans le ''composer.json'', tous les packages en ''symfony/nom_package: 4.4.*'' devront être en 5.4. Pour cela nous allons lancer la commande suivante : composer update "symfony/*" Normalement tous les paquets se mettront à jour avec la LTS actuelle de Symfony. Suite à cela voici une liste des petits problèmes que nous avons rencontré, la liste sera à l'avenir complétée pour documenter notre travail :) : ==== doctrine_migrations.yaml ==== Il faut modifier le fichier ''config/packages/doctrine_migrations.yaml''. On passe de ça: doctrine_migrations: dir_name: '%kernel.project_dir%/src/Migrations' # namespace is arbitrary but should be different from App\Migrations # as migrations classes should NOT be autoloaded namespace: DoctrineMigrations à ça: doctrine_migrations: migrations_paths: 'DoctrineMigrations': '%kernel.project_dir%/src/Migrations' enable_profiler: '%kernel.debug%' ==== Récupérer le repository lié à une classe ==== Avant: $data = $this->getDoctrine()->getRepository('App:MyEntity')->getData($id); Après: $data = $this->getDoctrine()->getRepository(MyEntity::class)->getData($id); ==== Logout CAS ==== On a eu besoin d'ajouter une route de logout. /** * @Route("/logout", name="logout") */ public function logoutAction(ParameterBagInterface $param) { if (($param->get('cas_logout_target') !== null) && (!empty($param->get('cas_logout_target')))) { \phpCAS::logoutWithRedirectService($param->get('cas_logout_target')); } else { \phpCAS::logout(); } } ==== UserInterface ==== Attention, si votre classe User implémente UserInterface alors la méthode ''getUsername'' est nécessaire. (même si vous ne nous en servez pas) ==== ManagerRegistry ==== Avant: use Doctrine\Common\Persistence\ManagerRegistry; Après: use Doctrine\Persistence\ManagerRegistry; ==== Listener (CASListener dans notre cas) ==== [[https://stackoverflow.com/questions/56438177/deprecated-the-listenerinterface-turn-your-listeners-into-callables-instead]] Avant: use Symfony\Component\HttpKernel\Event\GetResponseEvent; use Symfony\Component\Security\Http\Firewall\ListenerInterface; class CasListener implements ListenerInterface { public function handle(GetResponseEvent $event) { ... } public function checkHandleLogout(GetResponseEvent $event) { ... } } Après: use Symfony\Component\HttpKernel\Event\RequestEvent; class CasListener { public function __invoke(RequestEvent $event) { ... } public function checkHandleLogout(RequestEvent $event) { ... } } ==== PHPUnit ==== A rajouter dans le ''.gitignore'' Pour éviter les dingueries: ###> phpunit/phpunit ### /phpunit.xml .phpunit.result.cache ###< phpunit/phpunit ### ===== 2. La partie Front-end ===== Commencez par supprimer le fichier ''package-lock.json'' et le dossier ''node_modules''. Vérifier que vous avez la bonne version de Node. //(nvm tout ça tmtc)//😎 Lancer un gros ''npm update'' sa mère et corriger les éventuels bugs qui pourrait apparaitre. Attention à ne pas utiliser des versions trop récentes si certains packages ont des dépendances trop anciennes (mercé AdminBSB)