50:58 hello YoanDev c'est super l'utilisation du service mais cependant ton service est couplé à la command dans ce sens que tu passes SymfonyStyle en paramètres, cette dépendance te rendra la tâche difficile si tu dois réutiliser le service dans un controller par exemple. tous les appels à $io peut rester dans la command car c'est là leur place et personnellement j'ajouterai un callback pour la progression dans la boucle merci pour la vidéo
Absolument d'accord avec tout ce que tu dis, l'idée était de rester "simple" et la vidéo fait dèja une heure ha ha ha ^^ J'épingle ton commentaire pour les viewers :)
Salut Yoan, merci pour tes vidéos, ça aide en tant que junior dev, j'ai appris symfony durant ma formation ( sans docker ) et j'avais pas accroché mais la tu redonne goût a ce framework. Tu dis je copilot propose ce que tu allais faire et pour moi tu as fait de même en fin de vidéo en disant de dire à nos proches qu'on les aimes. Lol. Merci.
Merci beaucoup !!! J'avais galéré à l'adapté dans mon cas car j'avais beaucoup de données. Pour ceux qui auront le même probléme il faut simplement augmenter la taille de la mémoire dans la fonction execute de la commande avec cette ligne :ini_set('memory_limit', '1024M');
Une super vidéo comme toujours. Merci pour le partage. Tu es quasi synchro avec ce que je doit faire à chaque fois... c'est fou... Import CSV > une de mes prochaines missions... créer des commandes > le besoin est exprimés et il ne me reste plus quà mettre tout ça en place... MERCIIII encore..
Hello Yoan merci pour ces explications claires et précises. Elles m'ont permis d'utiliser ceci dans un projet de migration e-commerce (WooCommerce vers Symfony 6) En vérité on s'en fout de la vitesse de frappe quand c'est dans le but d'expliquer cela ne sert à rien de sprinter sur les touches ^^ Si jamais un jour tu te lance dans le même système mais en lecture de fichier XML :P
Merci YaonDev pour cette vidéo intéressante et très instructive en tant que dev jr. J'ai 2 questions : 1/ Avant importation en base de données du fichier CSV, comment valider les données par le composant « Validator » au cas où certains champs seraient vides ou n'auraient pas la longueur ou le type de donnée requis ? 2/ Si le fichier contient par exemple plus de 3 erreurs lors de la validation, comment le déplacer dans un sous-dossier « erreur » pour ne pas l'intègrer ? Merci encore pour le partage.
Bonjour à tous, merci de m'apporter votre aide pour la suite sur cette vidéo intéressante et très instructive en tant que dev jr. J'ai 2 questions : 1/ Avant importation en base de données du fichier CSV, comment valider les données par le composant « Validator » au cas où certains champs seraient vides ou n'auraient pas la longueur ou le type de donnée requis ? 2/ Si le fichier contient par exemple plus de 3 erreurs lors de la validation, comment le déplacer dans un sous-dossier « erreur » pour ne pas l'intègrer ? Merci encore pour le partage.
Merci pour la vidéo Yoan et la découverte de la lib pour les csv, ce qui aurait été intéressant pour les performances c'est d'aborder la notion de bulk insert ou update avec Doctrine pour éviter de charger tous les objets en mémoire, ça peut être utile sur ce genre de traitement.
Génial! Plein d'infos: Service, command, style, outil csv et client bdd. Très bien le format, car tes "galères" me montrent (que tu es humain ;) et comment s'en sortir avec la logique symfony. Tu es le meilleur. Est-il possible de diffuser les vidéos du samedi 1 heure plus tôt? On aurait 1h de moins a attendre chaque semaine...
Super approche ! J'ai du faire cela il y a quelques semaines, je suis content, ça ressemble beaucoup à ce que tu as fait, mais ta factorisation est beaucoup plus sympa. De plus, je ne voyais pas comment passer les messages dans SymfonyStyle, mais.... il suffisait de le passer en arguments dans le service :D Cool ! Merci pour tes vidéos !
super cette vidéo ! Au-delà de l'import de CSV en ligne de commande je ne connaissais pas Dbeaver, merci pour le partage
2 ปีที่แล้ว +1
Mais c'est qui ce Mickaël Andrieu à chaque fois, il est in-croyable xD Super vidéo, pour les personnes intéressées par les villes de France il va être amélioré bientôt 🙂
Merci pour la vidéo. Par contre dans l'exemple, vu que l'on flush qu'une seule fois, le test de savoir si la ville existe déjà ne fonctionne pas pour le primo chargement. Et donc on peut se retrouver avec des doublons. Et enfin j'ai réussi pour dbweaver avec docker, merci
Salut @YoanDev, comment tu aurais géré le SymfonyStyle que tu passes au ImportCitiesService si ce dernier avait dû être utilisé par autre chose qu'une commande console ? (ex: un Handler avec le messenger component) J'aurais été tenté de créer le SymfonyStyle avec un StringInput vide et un BufferedOutput mais je trouve que ça laisse la classe de la commande très dépendante de la logique CLI. Est-ce qu'il y a truc plus malin à faire ?
Super vidéo comme d’habitude. Il y a tant à dire sur les commandes qui sont un super outil pour les traitements de masse asynchrones. Pour les CSV, il y a aussi la bibliothèque Serializer de symfony avec le normalizer csv, mais la csv league que tu nous as fait découvrir a piqué mon intérêt et je vais l’essayer. Merci pour la découverte du makefile, j’ai les yeux qui brillent, je suppose que c’est facilement lançable en Cron puisque c’est du bash. Par défaut avec php8, il ne faudrait pas rajouter le declare strict type au début de chaque fichier? Que penses tu de la nouvelle norme qui arrive qui dit qu’il ne faut plus créer de Services, mais les découper en pkus spécifiques via des Handler, Helper, Trait, Manager, etc.. D’ailleurs la méthode de lecture avec des paramètres en plus, serait parfait dans un trait pour être utilisable par tous les services qui pourraient en avoir besoin. Le symfonystyle est sympa et la progressBar aussi, mais il vaut mieux privilégier monolog (tout un sujet d’ailleurs ^^) pour garder des traces pour le client. Avec messenger, penses tu qu’on puisse gérer les lancements de Command via l’appli ? Avec un héritage sur la classe command, on peut centraliser les batchs et gérer des historiques en base et des file.lock pour stopper les déploiements CI-CD si un batch tourne. J’adore les command, il y a beaucoup de choses pour s’amuser. Encore merci
Effectivement, on sentait que tu étais un peu fatigué... 😴 Peut-être que Copilot n'est pas super judicieux pour faire des tutos car tout ce code qui apparaît et disparaît en un éclair, ça déroute un peu (mon avis). Sinon très bien...
J'hésite pour Copilot car j'aime partager mon "expérience de développement* (au sens expérience utilisateur de développeur). Mais tu as raison, ça brouille probablement la pédagogie quelques fois. Je vais essayer de trouver un équilibre 👌
50:58 hello YoanDev c'est super l'utilisation du service mais cependant ton service est couplé à la command dans ce sens que tu passes SymfonyStyle en paramètres, cette dépendance te rendra la tâche difficile si tu dois réutiliser le service dans un controller par exemple. tous les appels à $io peut rester dans la command car c'est là leur place et personnellement j'ajouterai un callback pour la progression dans la boucle
merci pour la vidéo
Absolument d'accord avec tout ce que tu dis, l'idée était de rester "simple" et la vidéo fait dèja une heure ha ha ha ^^
J'épingle ton commentaire pour les viewers :)
@@yoandevco Génial ! merci pour ton travail 🙏
Dans la vraie vie, j'envoie tous dans des logs et je vais boire un café hé hé hé
Salut Yoan, merci pour tes vidéos, ça aide en tant que junior dev, j'ai appris symfony durant ma formation ( sans docker ) et j'avais pas accroché mais la tu redonne goût a ce framework.
Tu dis je copilot propose ce que tu allais faire et pour moi tu as fait de même en fin de vidéo en disant de dire à nos proches qu'on les aimes. Lol.
Merci.
Merci beaucoup !!! J'avais galéré à l'adapté dans mon cas car j'avais beaucoup de données. Pour ceux qui auront le même probléme il faut simplement augmenter la taille de la mémoire dans la fonction execute de la commande avec cette ligne :ini_set('memory_limit', '1024M');
J'ai adoré le "j'ai pas les doigts en face des touches" 🤣
Une super vidéo comme toujours. Merci pour le partage. Tu es quasi synchro avec ce que je doit faire à chaque fois... c'est fou... Import CSV > une de mes prochaines missions... créer des commandes > le besoin est exprimés et il ne me reste plus quà mettre tout ça en place... MERCIIII encore..
Hello Yoan merci pour ces explications claires et précises.
Elles m'ont permis d'utiliser ceci dans un projet de migration e-commerce (WooCommerce vers Symfony 6)
En vérité on s'en fout de la vitesse de frappe quand c'est dans le but d'expliquer cela ne sert à rien de sprinter sur les touches ^^
Si jamais un jour tu te lance dans le même système mais en lecture de fichier XML :P
Merci YaonDev pour cette vidéo intéressante et très instructive en tant que dev jr. J'ai 2 questions :
1/ Avant importation en base de données du fichier CSV, comment valider les données par le composant « Validator » au cas où certains champs seraient vides ou n'auraient pas la longueur ou le type de donnée requis ?
2/ Si le fichier contient par exemple plus de 3 erreurs lors de la validation, comment le déplacer dans un sous-dossier « erreur » pour ne pas l'intègrer ?
Merci encore pour le partage.
Bonjour à tous, merci de m'apporter votre aide pour la suite sur cette vidéo intéressante et très instructive en tant que dev jr. J'ai 2 questions : 1/ Avant importation en base de données du fichier CSV, comment valider les données par le composant « Validator » au cas où certains champs seraient vides ou n'auraient pas la longueur ou le type de donnée requis ? 2/ Si le fichier contient par exemple plus de 3 erreurs lors de la validation, comment le déplacer dans un sous-dossier « erreur » pour ne pas l'intègrer ? Merci encore pour le partage.
Merci pour la vidéo Yoan et la découverte de la lib pour les csv, ce qui aurait été intéressant pour les performances c'est d'aborder la notion de bulk insert ou update avec Doctrine pour éviter de charger tous les objets en mémoire, ça peut être utile sur ce genre de traitement.
Génial! Plein d'infos: Service, command, style, outil csv et client bdd. Très bien le format, car tes "galères" me montrent (que tu es humain ;) et comment s'en sortir avec la logique symfony. Tu es le meilleur. Est-il possible de diffuser les vidéos du samedi 1 heure plus tôt? On aurait 1h de moins a attendre chaque semaine...
Super approche ! J'ai du faire cela il y a quelques semaines, je suis content, ça ressemble beaucoup à ce que tu as fait, mais ta factorisation est beaucoup plus sympa. De plus, je ne voyais pas comment passer les messages dans SymfonyStyle, mais.... il suffisait de le passer en arguments dans le service :D Cool ! Merci pour tes vidéos !
super cette vidéo ! Au-delà de l'import de CSV en ligne de commande je ne connaissais pas Dbeaver, merci pour le partage
Mais c'est qui ce Mickaël Andrieu à chaque fois, il est in-croyable xD
Super vidéo, pour les personnes intéressées par les villes de France il va être amélioré bientôt 🙂
Hé hé 😘
Merci pour cette vidéo de qualité ! Cela va mettre super utile 😁 bon courage vivement samedi prochain pour une nouvelle découverte 🙏.
Merci Yoyo tjrs au top ! j'adore tes vidéos courtes d'une heure 😂
Merci Yoan. Très sympa et intéressant
Démonstration très digeste.
Merci pour la vidéo. Par contre dans l'exemple, vu que l'on flush qu'une seule fois, le test de savoir si la ville existe déjà ne fonctionne pas pour le primo chargement. Et donc on peut se retrouver avec des doublons.
Et enfin j'ai réussi pour dbweaver avec docker, merci
Ciao, moi j'ai fais une chose semblable au contraire, une command qui me fait un backup de la base de données en csv :)
Bonjour,
Bravo pour cette vidéo.
Pouvez vous mettre le git en ligne?
Merci.
Un grand merci, il y aurait-il beaucoup de différence avec le fichier json ?
Salut @YoanDev, comment tu aurais géré le SymfonyStyle que tu passes au ImportCitiesService si ce dernier avait dû être utilisé par autre chose qu'une commande console ? (ex: un Handler avec le messenger component)
J'aurais été tenté de créer le SymfonyStyle avec un StringInput vide et un BufferedOutput mais je trouve que ça laisse la classe de la commande très dépendante de la logique CLI.
Est-ce qu'il y a truc plus malin à faire ?
Super vidéo comme d’habitude. Il y a tant à dire sur les commandes qui sont un super outil pour les traitements de masse asynchrones.
Pour les CSV, il y a aussi la bibliothèque Serializer de symfony avec le normalizer csv, mais la csv league que tu nous as fait découvrir a piqué mon intérêt et je vais l’essayer.
Merci pour la découverte du makefile, j’ai les yeux qui brillent, je suppose que c’est facilement lançable en Cron puisque c’est du bash.
Par défaut avec php8, il ne faudrait pas rajouter le declare strict type au début de chaque fichier?
Que penses tu de la nouvelle norme qui arrive qui dit qu’il ne faut plus créer de Services, mais les découper en pkus spécifiques via des Handler, Helper, Trait, Manager, etc..
D’ailleurs la méthode de lecture avec des paramètres en plus, serait parfait dans un trait pour être utilisable par tous les services qui pourraient en avoir besoin.
Le symfonystyle est sympa et la progressBar aussi, mais il vaut mieux privilégier monolog (tout un sujet d’ailleurs ^^) pour garder des traces pour le client.
Avec messenger, penses tu qu’on puisse gérer les lancements de Command via l’appli ?
Avec un héritage sur la classe command, on peut centraliser les batchs et gérer des historiques en base et des file.lock pour stopper les déploiements CI-CD si un batch tourne.
J’adore les command, il y a beaucoup de choses pour s’amuser.
Encore merci
C’est ce que je voulais dire aussi que le composant Serializer intègre déjà un encoder pour le CSV .
Hello Yoan. Quand ce sera un très large CSV, genre de environ 1gb. Tu as des idées pour ça?
Symfony devient hypper sympa avec vous🙏🏻
Merci beaucoup !
Merci yoyo
1 an et demi que j'utilise csv league mais le bundle a ses limites (et on fait de l'import / export).
Comme tout, il faut choisir le bon outil pour la bonne mission, tu as raison
Effectivement, on sentait que tu étais un peu fatigué... 😴
Peut-être que Copilot n'est pas super judicieux pour faire des tutos car tout ce code qui apparaît et disparaît en un éclair, ça déroute un peu (mon avis).
Sinon très bien...
J'hésite pour Copilot car j'aime partager mon "expérience de développement* (au sens expérience utilisateur de développeur).
Mais tu as raison, ça brouille probablement la pédagogie quelques fois.
Je vais essayer de trouver un équilibre 👌