<!DOCTYPE html>
<html lang="fr">
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
        <meta http-equiv="x-ua-compatible" content="ie=edge">

        <title>Planète PHP</title>
        <link rel="icon" href="/assets/images/veille-logo-kfIoDGF.svg" sizes="any" type="image/svg+xml">

        <link rel="alternate" type="application/rss+xml" title="RSS" href="/rss.php">

        
    
            <link rel="canonical" href="/articles" />
    
            <link rel="next" href="/articles?page=2" />
    
                    <link rel="stylesheet" href="/assets/styles/app-oI5o2Jp.css">
        
                    
<link rel="stylesheet" href="/assets/styles/app-oI5o2Jp.css">
<script type="importmap">
{
    "imports": {
        "app": "/assets/app-NAdK9l0.js",
        "/assets/styles/app.css": "data:application/javascript,"
    }
}
</script><script>
if (!HTMLScriptElement.supports || !HTMLScriptElement.supports('importmap')) (function () {
    const script = document.createElement('script');
    script.src = 'https://ga.jspm.io/npm:es-module-shims@1.10.0/dist/es-module-shims.js';
    if (document.currentScript?.nonce) script.nonce = document.currentScript.nonce;
    script.setAttribute('crossorigin', 'anonymous');
    script.setAttribute('integrity', 'sha384-ie1x72Xck445i0j4SlNJ5W5iGeL3Dpa0zD48MZopgWsjNB/lt60SuG1iduZGNnJn');
    document.head.appendChild(script);
})();
</script>
<link rel="modulepreload" href="/assets/app-NAdK9l0.js">
<script type="module">import 'app';</script>            </head>
    <body class="dark:bg-slate-800 flex flex-col h-screen justify-between">
        <div>
            <div class="hidden sm:block bg-primary-900">
                <nav class="container mx-auto flex text-white justify-center">
                    <a href="https://afup.org" class="px-5 py-1 text-sm hover:bg-primary-500">AFUP</a>
                    <a href="https://event.afup.org" class="px-5 py-1 text-sm hover:bg-primary-500">Forum PHP 2026</a>
                    <a href="https://barometre.afup.org" class="px-5 py-1 text-sm hover:bg-primary-500">Baromètre</a>
                    <a href="https://planete-php.fr" class="px-5 py-1 text-sm hover:bg-primary-500 bg-primary-500">Planète PHP</a>
                    <a href="https://pufa.afup.org" class="px-5 py-1 text-sm hover:bg-primary-500">PUFA</a>
                </nav>
            </div>

            <div class="bg-primary-500">
                <nav class="container mx-auto flex flex-col sm:flex-row text-white px-0 sm:px-64 justify-center">
                    <div class="flex items-center grow gap-4 p-2 sm:p-0">
                        <img src="/assets/images/afup-icon-inverted-Fo5OHjq.png" class="h-11 my-auto" alt=""/>
                        <a href="/" class="text-2xl font-bold" data-qa="site-name">Planète PHP</a>
                    </div>
                    <div class="flex justify-between">
                        <a href="/articles" class="px-6 py-4 hover:bg-primary-300 bg-primary-300 sm:bg-transparent sm:border-b-4 border-white">Articles</a>
                        <a href="/feeds" class="px-6 py-4 hover:bg-primary-300">Sources</a>
                        <a href="http://www.planete-php.fr/rss.php" class="px-6 py-4 hover:bg-primary-300">Flux RSS</a>
                    </div>
                </nav>
            </div>

            <main class="container mx-auto px-0 sm:px-64 mt-0 sm:mt-4">
                
    <div class="flex flex-col gap-4 mt-4 sm:mt-0">
                    <div class="px-4 sm:px-0 sm:pt-4 border-b border-gray-200 dark:border-gray-600" data-qa="article">
    <div class="flex flex-row gap-5">
        <div class="text-gray-500 dark:text-gray-300 pt-1 hidden sm:block" data-qa="article-1-date">23/07/2026</div>
        <article class="pb-4 sm:pb-8">
            <span class="sm:hidden text-sm text-gray-500 dark:text-gray-300">
                23/07/2026
            </span>
            <div class="flex flex-col sm:flex-row gap-2 sm:gap-10 justify-between items-baseline mb-4 sm:mb-0">
                <h2 class="font-bold text-lg sm:text-xl text-primary-900 dark:text-gray-300" data-qa="article-1-title">Détecter les régressions visuelles dans la CI avec Playwright et Docker</h2>
                <a href="https://jolicode.com/blog/detecter-les-regressions-visuelles-dans-la-ci-avec-playwright-et-docker" class="grow-0 shrink-0 basis-auto text-primary-500 hover:underline" data-qa="article-1-feed">
                    Lire l'article sur Jolicode
                </a>
            </div>
            <p class="py-2 font-light dark:text-gray-300" data-qa="article-1-content">
                Sur un gros site public, le front bouge tout le temps : une migration Tailwind par-ci, un composant React par-là, un bloc CMS qui change de gabarit. Et comme toujours avec le CSS, la modification d’une...
            </p>
        </article>
    </div>
</div>

                    <div class="px-4 sm:px-0 sm:pt-4 border-b border-gray-200 dark:border-gray-600" data-qa="article">
    <div class="flex flex-row gap-5">
        <div class="text-gray-500 dark:text-gray-300 pt-1 hidden sm:block" data-qa="article-2-date">20/07/2026</div>
        <article class="pb-4 sm:pb-8">
            <span class="sm:hidden text-sm text-gray-500 dark:text-gray-300">
                20/07/2026
            </span>
            <div class="flex flex-col sm:flex-row gap-2 sm:gap-10 justify-between items-baseline mb-4 sm:mb-0">
                <h2 class="font-bold text-lg sm:text-xl text-primary-900 dark:text-gray-300" data-qa="article-2-title">JoliMediaSyliusBundle, un nouveau bridge pour vos projets Sylius</h2>
                <a href="https://jolicode.com/blog/jolimediasyliusbundle-un-nouveau-bridge-pour-vos-projets-sylius" class="grow-0 shrink-0 basis-auto text-primary-500 hover:underline" data-qa="article-2-feed">
                    Lire l'article sur Jolicode
                </a>
            </div>
            <p class="py-2 font-light dark:text-gray-300" data-qa="article-2-content">
                Est-il encore nécessaire de présenter l’excellent framework E-commerce Sylius ?
Si Sylius s’est imposé dans l’écosystème e-commerce, c’est notamment grâce à sa capacité à s’adapter à des besoins métier...
            </p>
        </article>
    </div>
</div>

                    <div class="px-4 sm:px-0 sm:pt-4 border-b border-gray-200 dark:border-gray-600" data-qa="article">
    <div class="flex flex-row gap-5">
        <div class="text-gray-500 dark:text-gray-300 pt-1 hidden sm:block" data-qa="article-3-date">17/07/2026</div>
        <article class="pb-4 sm:pb-8">
            <span class="sm:hidden text-sm text-gray-500 dark:text-gray-300">
                17/07/2026
            </span>
            <div class="flex flex-col sm:flex-row gap-2 sm:gap-10 justify-between items-baseline mb-4 sm:mb-0">
                <h2 class="font-bold text-lg sm:text-xl text-primary-900 dark:text-gray-300" data-qa="article-3-title">Un RAG Magique !</h2>
                <a href="https://les-tilleuls.coop/blog/un-rag-magique" class="grow-0 shrink-0 basis-auto text-primary-500 hover:underline" data-qa="article-3-feed">
                    Lire l'article sur Les-Tilleuls.coop
                </a>
            </div>
            <p class="py-2 font-light dark:text-gray-300" data-qa="article-3-content">
                
Il y a peu, je me suis mis à rejouer à Magic: The Gathering avec des amis. C’est un jeu de cartes à collectionner dans lequel on construit des decks pour affronter ses adversaires à travers divers modes...
            </p>
        </article>
    </div>
</div>

                    <div class="px-4 sm:px-0 sm:pt-4 border-b border-gray-200 dark:border-gray-600" data-qa="article">
    <div class="flex flex-row gap-5">
        <div class="text-gray-500 dark:text-gray-300 pt-1 hidden sm:block" data-qa="article-4-date">17/07/2026</div>
        <article class="pb-4 sm:pb-8">
            <span class="sm:hidden text-sm text-gray-500 dark:text-gray-300">
                17/07/2026
            </span>
            <div class="flex flex-col sm:flex-row gap-2 sm:gap-10 justify-between items-baseline mb-4 sm:mb-0">
                <h2 class="font-bold text-lg sm:text-xl text-primary-900 dark:text-gray-300" data-qa="article-4-title">Accélérer votre CI : mettre en cache l’état de la base de données</h2>
                <a href="https://jolicode.com/blog/accelerer-votre-ci-mettre-en-cache-l-etat-de-la-base-de-donnees" class="grow-0 shrink-0 basis-auto text-primary-500 hover:underline" data-qa="article-4-feed">
                    Lire l'article sur Jolicode
                </a>
            </div>
            <p class="py-2 font-light dark:text-gray-300" data-qa="article-4-content">
                Il y a quelques années, j’écrivais Accélérer votre intégration continue. L’article passait en revue tout un tas de techniques pour rendre une CI plus rapide : cache Composer, cache Yarn, layers Docker,...
            </p>
        </article>
    </div>
</div>

                    <div class="px-4 sm:px-0 sm:pt-4 border-b border-gray-200 dark:border-gray-600" data-qa="article">
    <div class="flex flex-row gap-5">
        <div class="text-gray-500 dark:text-gray-300 pt-1 hidden sm:block" data-qa="article-5-date">16/07/2026</div>
        <article class="pb-4 sm:pb-8">
            <span class="sm:hidden text-sm text-gray-500 dark:text-gray-300">
                16/07/2026
            </span>
            <div class="flex flex-col sm:flex-row gap-2 sm:gap-10 justify-between items-baseline mb-4 sm:mb-0">
                <h2 class="font-bold text-lg sm:text-xl text-primary-900 dark:text-gray-300" data-qa="article-5-title">Customiser les grilles Sylius - DX améliorée avec les Grid mutators</h2>
                <a href="https://jolicode.com/blog/customiser-les-grilles-sylius-dx-amelioree-avec-les-grid-mutators" class="grow-0 shrink-0 basis-auto text-primary-500 hover:underline" data-qa="article-5-feed">
                    Lire l'article sur Jolicode
                </a>
            </div>
            <p class="py-2 font-light dark:text-gray-300" data-qa="article-5-content">
                Dans Sylius, les grilles sont responsables de l'affichage des listes du back-office : récupération des données, définition des colonnes, filtres, actions...
Sylius E-commerce fournit un grand nombre de...
            </p>
        </article>
    </div>
</div>

                    <div class="px-4 sm:px-0 sm:pt-4 border-b border-gray-200 dark:border-gray-600" data-qa="article">
    <div class="flex flex-row gap-5">
        <div class="text-gray-500 dark:text-gray-300 pt-1 hidden sm:block" data-qa="article-6-date">15/07/2026</div>
        <article class="pb-4 sm:pb-8">
            <span class="sm:hidden text-sm text-gray-500 dark:text-gray-300">
                15/07/2026
            </span>
            <div class="flex flex-col sm:flex-row gap-2 sm:gap-10 justify-between items-baseline mb-4 sm:mb-0">
                <h2 class="font-bold text-lg sm:text-xl text-primary-900 dark:text-gray-300" data-qa="article-6-title">Sécurité PHP : Alexandre Daubois rejoint la PHP Foundation pour renforcer le cœur du langage</h2>
                <a href="https://les-tilleuls.coop/blog/securite-php-alexandre-daubois-rejoint-la-php-foundation-pour-renforcer-le-coeur-du-langage" class="grow-0 shrink-0 basis-auto text-primary-500 hover:underline" data-qa="article-6-feed">
                    Lire l'article sur Les-Tilleuls.coop
                </a>
            </div>
            <p class="py-2 font-light dark:text-gray-300" data-qa="article-6-content">
                
La sécurité des applications ne dépend pas uniquement du code spécifique développé pour un projet, mais également de la robustesse des briques technologiques fondamentales sur lesquelles il repose. Dans...
            </p>
        </article>
    </div>
</div>

                    <div class="px-4 sm:px-0 sm:pt-4 border-b border-gray-200 dark:border-gray-600" data-qa="article">
    <div class="flex flex-row gap-5">
        <div class="text-gray-500 dark:text-gray-300 pt-1 hidden sm:block" data-qa="article-7-date">15/07/2026</div>
        <article class="pb-4 sm:pb-8">
            <span class="sm:hidden text-sm text-gray-500 dark:text-gray-300">
                15/07/2026
            </span>
            <div class="flex flex-col sm:flex-row gap-2 sm:gap-10 justify-between items-baseline mb-4 sm:mb-0">
                <h2 class="font-bold text-lg sm:text-xl text-primary-900 dark:text-gray-300" data-qa="article-7-title">Nouveau verbe HTTP : QUERY</h2>
                <a href="https://blog.eleven-labs.com/fr/http-query-method/" class="grow-0 shrink-0 basis-auto text-primary-500 hover:underline" data-qa="article-7-feed">
                    Lire l'article sur Eleven labs
                </a>
            </div>
            <p class="py-2 font-light dark:text-gray-300" data-qa="article-7-content">
                Depuis le 15 juin 2026, la RFC 10008: The HTTP QUERY Method est en "Proposed Standard" après plus de 10 ans en draft. Ce nouveau verbe HTTP va permettre de régler un souci régulier dans nos APIs : gérer...
            </p>
        </article>
    </div>
</div>

                    <div class="px-4 sm:px-0 sm:pt-4 border-b border-gray-200 dark:border-gray-600" data-qa="article">
    <div class="flex flex-row gap-5">
        <div class="text-gray-500 dark:text-gray-300 pt-1 hidden sm:block" data-qa="article-8-date">07/07/2026</div>
        <article class="pb-4 sm:pb-8">
            <span class="sm:hidden text-sm text-gray-500 dark:text-gray-300">
                07/07/2026
            </span>
            <div class="flex flex-col sm:flex-row gap-2 sm:gap-10 justify-between items-baseline mb-4 sm:mb-0">
                <h2 class="font-bold text-lg sm:text-xl text-primary-900 dark:text-gray-300" data-qa="article-8-title">Le programme du Forum PHP 2026 est sorti !</h2>
                <a href="https://afup.org/news/1261-programme-forumphp2026-sorti" class="grow-0 shrink-0 basis-auto text-primary-500 hover:underline" data-qa="article-8-feed">
                    Lire l'article sur AFUP
                </a>
            </div>
            <p class="py-2 font-light dark:text-gray-300" data-qa="article-8-content">
                PHP, le cœur battant du programme
Le langage reste le fil rouge du Forum : des talks techniques vont nous permettre de plonger dans les rouages du langage. On parlera défense du code avec "PHP Défensif...
            </p>
        </article>
    </div>
</div>

                    <div class="px-4 sm:px-0 sm:pt-4 border-b border-gray-200 dark:border-gray-600" data-qa="article">
    <div class="flex flex-row gap-5">
        <div class="text-gray-500 dark:text-gray-300 pt-1 hidden sm:block" data-qa="article-9-date">02/07/2026</div>
        <article class="pb-4 sm:pb-8">
            <span class="sm:hidden text-sm text-gray-500 dark:text-gray-300">
                02/07/2026
            </span>
            <div class="flex flex-col sm:flex-row gap-2 sm:gap-10 justify-between items-baseline mb-4 sm:mb-0">
                <h2 class="font-bold text-lg sm:text-xl text-primary-900 dark:text-gray-300" data-qa="article-9-title">La Clean Architecture ne se résume pas à une arborescence de dossiers</h2>
                <a href="https://www.jdecool.fr/blog/2026/07/03/la-clean-architecture-ne-se-resume-pas-a-une-arborescence-de-dossiers.html" class="grow-0 shrink-0 basis-auto text-primary-500 hover:underline" data-qa="article-9-feed">
                    Lire l'article sur Jérémy DECOOL
                </a>
            </div>
            <p class="py-2 font-light dark:text-gray-300" data-qa="article-9-content">
                Pour beaucoup, la Clean Architecture se résume à un découpage du code en 3 couches: Domain, Application et Infrastructure (avec éventuellement une couche de présentation). Pourtant, si l’on regarde le...
            </p>
        </article>
    </div>
</div>

                    <div class="px-4 sm:px-0 sm:pt-4 border-b border-gray-200 dark:border-gray-600" data-qa="article">
    <div class="flex flex-row gap-5">
        <div class="text-gray-500 dark:text-gray-300 pt-1 hidden sm:block" data-qa="article-10-date">02/07/2026</div>
        <article class="pb-4 sm:pb-8">
            <span class="sm:hidden text-sm text-gray-500 dark:text-gray-300">
                02/07/2026
            </span>
            <div class="flex flex-col sm:flex-row gap-2 sm:gap-10 justify-between items-baseline mb-4 sm:mb-0">
                <h2 class="font-bold text-lg sm:text-xl text-primary-900 dark:text-gray-300" data-qa="article-10-title">Profiler un consumer avec Blackfire</h2>
                <a href="https://jolicode.com/blog/profiler-un-consumer-avec-blackfire" class="grow-0 shrink-0 basis-auto text-primary-500 hover:underline" data-qa="article-10-feed">
                    Lire l'article sur Jolicode
                </a>
            </div>
            <p class="py-2 font-light dark:text-gray-300" data-qa="article-10-content">
                Quand on parle de profiling PHP avec Blackfire, on pense généralement à une requête HTTP : un clic sur l'extension navigateur, et hop, le profil apparaît.
Mais que faire quand le code à profiler tourne...
            </p>
        </article>
    </div>
</div>

                    <div class="px-4 sm:px-0 sm:pt-4 border-b border-gray-200 dark:border-gray-600" data-qa="article">
    <div class="flex flex-row gap-5">
        <div class="text-gray-500 dark:text-gray-300 pt-1 hidden sm:block" data-qa="article-11-date">01/07/2026</div>
        <article class="pb-4 sm:pb-8">
            <span class="sm:hidden text-sm text-gray-500 dark:text-gray-300">
                01/07/2026
            </span>
            <div class="flex flex-col sm:flex-row gap-2 sm:gap-10 justify-between items-baseline mb-4 sm:mb-0">
                <h2 class="font-bold text-lg sm:text-xl text-primary-900 dark:text-gray-300" data-qa="article-11-title">Améliorer l’accessibilité d’un site existant : retour d’expérience chez JoliCode</h2>
                <a href="https://jolicode.com/blog/ameliorer-l-accessibilite-d-un-site-existant-retour-d-experience-chez-jolicode" class="grow-0 shrink-0 basis-auto text-primary-500 hover:underline" data-qa="article-11-feed">
                    Lire l'article sur Jolicode
                </a>
            </div>
            <p class="py-2 font-light dark:text-gray-300" data-qa="article-11-content">
                Malgré des avancées réglementaires importantes, l’accessibilité numérique reste largement sous-estimée dans de nombreux projets web. Depuis le 28 juin 2025, l’European Accessibility Act (EAA) étend les...
            </p>
        </article>
    </div>
</div>

                    <div class="px-4 sm:px-0 sm:pt-4 border-b border-gray-200 dark:border-gray-600" data-qa="article">
    <div class="flex flex-row gap-5">
        <div class="text-gray-500 dark:text-gray-300 pt-1 hidden sm:block" data-qa="article-12-date">26/06/2026</div>
        <article class="pb-4 sm:pb-8">
            <span class="sm:hidden text-sm text-gray-500 dark:text-gray-300">
                26/06/2026
            </span>
            <div class="flex flex-col sm:flex-row gap-2 sm:gap-10 justify-between items-baseline mb-4 sm:mb-0">
                <h2 class="font-bold text-lg sm:text-xl text-primary-900 dark:text-gray-300" data-qa="article-12-title">Domain Driven Design: l&#039;essentiel est avant le code</h2>
                <a href="https://www.jdecool.fr/blog/2026/06/27/domain-driven-design-l-essentiel-est-avant-le-code.html" class="grow-0 shrink-0 basis-auto text-primary-500 hover:underline" data-qa="article-12-feed">
                    Lire l'article sur Jérémy DECOOL
                </a>
            </div>
            <p class="py-2 font-light dark:text-gray-300" data-qa="article-12-content">
                Pour beaucoup de développeurs, voir un dossier “Domain” dans le code source d’un projet, visant à isoler la partie métier, et avoir des objets riches avec un nommage cohérent, c’est faire du DDD (Domain...
            </p>
        </article>
    </div>
</div>

                    <div class="px-4 sm:px-0 sm:pt-4 border-b border-gray-200 dark:border-gray-600" data-qa="article">
    <div class="flex flex-row gap-5">
        <div class="text-gray-500 dark:text-gray-300 pt-1 hidden sm:block" data-qa="article-13-date">24/06/2026</div>
        <article class="pb-4 sm:pb-8">
            <span class="sm:hidden text-sm text-gray-500 dark:text-gray-300">
                24/06/2026
            </span>
            <div class="flex flex-col sm:flex-row gap-2 sm:gap-10 justify-between items-baseline mb-4 sm:mb-0">
                <h2 class="font-bold text-lg sm:text-xl text-primary-900 dark:text-gray-300" data-qa="article-13-title">UX Days 2026 : Design, IA et conscience, ce que cette journée nous a appris sur notre métier</h2>
                <a href="https://jolicode.com/blog/ux-days-2026-design-ia-et-conscience-ce-que-cette-journee-nous-a-appris-sur-notre-metier" class="grow-0 shrink-0 basis-auto text-primary-500 hover:underline" data-qa="article-13-feed">
                    Lire l'article sur Jolicode
                </a>
            </div>
            <p class="py-2 font-light dark:text-gray-300" data-qa="article-13-content">
                L'intelligence artificielle redessine nos métiers. C'est le constat que partagent aujourd'hui designers, développeurs et product managers. Les UX Days 2026 n'ont pas échappé à cette réalité. Parmi les...
            </p>
        </article>
    </div>
</div>

                    <div class="px-4 sm:px-0 sm:pt-4 border-b border-gray-200 dark:border-gray-600" data-qa="article">
    <div class="flex flex-row gap-5">
        <div class="text-gray-500 dark:text-gray-300 pt-1 hidden sm:block" data-qa="article-14-date">24/06/2026</div>
        <article class="pb-4 sm:pb-8">
            <span class="sm:hidden text-sm text-gray-500 dark:text-gray-300">
                24/06/2026
            </span>
            <div class="flex flex-col sm:flex-row gap-2 sm:gap-10 justify-between items-baseline mb-4 sm:mb-0">
                <h2 class="font-bold text-lg sm:text-xl text-primary-900 dark:text-gray-300" data-qa="article-14-title">Comité de sélection du Forum PHP 2026 : ses membres, son processus, son verdict !</h2>
                <a href="https://afup.org/news/1260-comite-selection-forumphp2026" class="grow-0 shrink-0 basis-auto text-primary-500 hover:underline" data-qa="article-14-feed">
                    Lire l'article sur AFUP
                </a>
            </div>
            <p class="py-2 font-light dark:text-gray-300" data-qa="article-14-content">
                Qui est membre du comité de sélection 2026 ?
Le comité de sélection est en charge d’élaborer le programme du Forum PHP. Il est constitué de membres du pôle conférences de l’AFUP, membres qui sont également...
            </p>
        </article>
    </div>
</div>

                    <div class="px-4 sm:px-0 sm:pt-4 border-b border-gray-200 dark:border-gray-600" data-qa="article">
    <div class="flex flex-row gap-5">
        <div class="text-gray-500 dark:text-gray-300 pt-1 hidden sm:block" data-qa="article-15-date">16/06/2026</div>
        <article class="pb-4 sm:pb-8">
            <span class="sm:hidden text-sm text-gray-500 dark:text-gray-300">
                16/06/2026
            </span>
            <div class="flex flex-col sm:flex-row gap-2 sm:gap-10 justify-between items-baseline mb-4 sm:mb-0">
                <h2 class="font-bold text-lg sm:text-xl text-primary-900 dark:text-gray-300" data-qa="article-15-title">L&#039;IA pousse à faire soi-même, au détriment de l&#039;équipe</h2>
                <a href="https://www.jdecool.fr/blog/2026/06/17/l-ia-pousse-a-faire-soi-meme-au-detriment-de-l-equipe.html" class="grow-0 shrink-0 basis-auto text-primary-500 hover:underline" data-qa="article-15-feed">
                    Lire l'article sur Jérémy DECOOL
                </a>
            </div>
            <p class="py-2 font-light dark:text-gray-300" data-qa="article-15-content">
                Je commence à voir de plus en plus d’équipes où le lead tech est devenu plus rapide à implémenter une fonctionnalité via l’IA qu’à l’expliquer, la déléguer et attendre que quelqu’un la prenne en charge....
            </p>
        </article>
    </div>
</div>

                    <div class="px-4 sm:px-0 sm:pt-4 border-b border-gray-200 dark:border-gray-600" data-qa="article">
    <div class="flex flex-row gap-5">
        <div class="text-gray-500 dark:text-gray-300 pt-1 hidden sm:block" data-qa="article-16-date">15/06/2026</div>
        <article class="pb-4 sm:pb-8">
            <span class="sm:hidden text-sm text-gray-500 dark:text-gray-300">
                15/06/2026
            </span>
            <div class="flex flex-col sm:flex-row gap-2 sm:gap-10 justify-between items-baseline mb-4 sm:mb-0">
                <h2 class="font-bold text-lg sm:text-xl text-primary-900 dark:text-gray-300" data-qa="article-16-title">Comprendre (enfin) les TTY et PTY avec le composant Process de Symfony</h2>
                <a href="https://jolicode.com/blog/comprendre-enfin-les-tty-et-pty-avec-le-composant-process-de-symfony" class="grow-0 shrink-0 basis-auto text-primary-500 hover:underline" data-qa="article-16-feed">
                    Lire l'article sur Jolicode
                </a>
            </div>
            <p class="py-2 font-light dark:text-gray-300" data-qa="article-16-content">
                Vous est-il déjà arrivé de lancer une commande (composer, rsync ou une commande Symfony) directement dans votre terminal pour y admirer de jolies barres de progression colorées, mais de constater que...
            </p>
        </article>
    </div>
</div>

                    <div class="px-4 sm:px-0 sm:pt-4 border-b border-gray-200 dark:border-gray-600" data-qa="article">
    <div class="flex flex-row gap-5">
        <div class="text-gray-500 dark:text-gray-300 pt-1 hidden sm:block" data-qa="article-17-date">10/06/2026</div>
        <article class="pb-4 sm:pb-8">
            <span class="sm:hidden text-sm text-gray-500 dark:text-gray-300">
                10/06/2026
            </span>
            <div class="flex flex-col sm:flex-row gap-2 sm:gap-10 justify-between items-baseline mb-4 sm:mb-0">
                <h2 class="font-bold text-lg sm:text-xl text-primary-900 dark:text-gray-300" data-qa="article-17-title">Comment utiliser les attributs PHP sur un contrôleur Symfony ?</h2>
                <a href="https://jolicode.com/blog/comment-utiliser-les-attributs-php-sur-un-controleur-symfony" class="grow-0 shrink-0 basis-auto text-primary-500 hover:underline" data-qa="article-17-feed">
                    Lire l'article sur Jolicode
                </a>
            </div>
            <p class="py-2 font-light dark:text-gray-300" data-qa="article-17-content">
                PHP 8.0 a introduit les attributs, et c'est une excellente fonctionnalité ! Le code devient plus lisible, plus simple à écrire, et bénéficie pleinement de la coloration syntaxique et du linting de notre...
            </p>
        </article>
    </div>
</div>

                    <div class="px-4 sm:px-0 sm:pt-4 border-b border-gray-200 dark:border-gray-600" data-qa="article">
    <div class="flex flex-row gap-5">
        <div class="text-gray-500 dark:text-gray-300 pt-1 hidden sm:block" data-qa="article-18-date">09/06/2026</div>
        <article class="pb-4 sm:pb-8">
            <span class="sm:hidden text-sm text-gray-500 dark:text-gray-300">
                09/06/2026
            </span>
            <div class="flex flex-col sm:flex-row gap-2 sm:gap-10 justify-between items-baseline mb-4 sm:mb-0">
                <h2 class="font-bold text-lg sm:text-xl text-primary-900 dark:text-gray-300" data-qa="article-18-title">Améliorer la maintenance de vos workflows GitHub</h2>
                <a href="https://jolicode.com/blog/ameliorer-la-maintenance-de-vos-workflows-github" class="grow-0 shrink-0 basis-auto text-primary-500 hover:underline" data-qa="article-18-feed">
                    Lire l'article sur Jolicode
                </a>
            </div>
            <p class="py-2 font-light dark:text-gray-300" data-qa="article-18-content">
                Les failles de sécurité liées à la supply chain sont de plus en plus courantes. En tant que mainteneur d'un projet open source populaire, l'enjeu est de taille. Votre code est déployé sur de nombreux...
            </p>
        </article>
    </div>
</div>

                    <div class="px-4 sm:px-0 sm:pt-4 border-b border-gray-200 dark:border-gray-600" data-qa="article">
    <div class="flex flex-row gap-5">
        <div class="text-gray-500 dark:text-gray-300 pt-1 hidden sm:block" data-qa="article-19-date">09/06/2026</div>
        <article class="pb-4 sm:pb-8">
            <span class="sm:hidden text-sm text-gray-500 dark:text-gray-300">
                09/06/2026
            </span>
            <div class="flex flex-col sm:flex-row gap-2 sm:gap-10 justify-between items-baseline mb-4 sm:mb-0">
                <h2 class="font-bold text-lg sm:text-xl text-primary-900 dark:text-gray-300" data-qa="article-19-title">Satellites, Horloge à air et cimetière des IA</h2>
                <a href="https://www.synolia.com/synolab/front-office/satellites-horloge-a-air-et-cimetiere-des-ia/" class="grow-0 shrink-0 basis-auto text-primary-500 hover:underline" data-qa="article-19-feed">
                    Lire l'article sur Synolia
                </a>
            </div>
            <p class="py-2 font-light dark:text-gray-300" data-qa="article-19-content">
                Découvrez notre veille technique du mois de mai entre satellites, horloge à air et cimetière des IA.
Tout savoir sur les satellites
Vous êtes-vous déjà demandé comment Internet arrivait jusqu’à vos téléphones...
            </p>
        </article>
    </div>
</div>

                    <div class="px-4 sm:px-0 sm:pt-4 border-b border-gray-200 dark:border-gray-600" data-qa="article">
    <div class="flex flex-row gap-5">
        <div class="text-gray-500 dark:text-gray-300 pt-1 hidden sm:block" data-qa="article-20-date">08/06/2026</div>
        <article class="pb-4 sm:pb-8">
            <span class="sm:hidden text-sm text-gray-500 dark:text-gray-300">
                08/06/2026
            </span>
            <div class="flex flex-col sm:flex-row gap-2 sm:gap-10 justify-between items-baseline mb-4 sm:mb-0">
                <h2 class="font-bold text-lg sm:text-xl text-primary-900 dark:text-gray-300" data-qa="article-20-title">Contre-performance pour la campagne de collecte du baromètre des salaires en PHP 2026</h2>
                <a href="https://afup.org/news/1259-contreperformance-barometre-salaires-2026" class="grow-0 shrink-0 basis-auto text-primary-500 hover:underline" data-qa="article-20-feed">
                    Lire l'article sur AFUP
                </a>
            </div>
            <p class="py-2 font-light dark:text-gray-300" data-qa="article-20-content">
                Une participation en baisse
La quatorzième édition du baromètre des salaires en PHP vient de clore sa campagne de récolte de données. 509 professionnel•le•s ont pris le temps de répondre à l'enquête cette...
            </p>
        </article>
    </div>
</div>

            </div>

    <nav class="sm:my-12 flex justify-between dark:text-gray-300">
        <div class="flex-grow">
                    </div>

                    <a href="/articles?page=2" class="block p-6 sm:p-0 hover:underline" data-qa="page-next">Page suivante</a>
            </nav>

            </main>
        </div>

        <footer class="py-5 bg-slate-50 dark:bg-slate-700 dark:text-white text-center">
            Un site <a href="https://afup.org" class="text-primary-500 hover:underline">AFUP</a><br />
            Hébergé sur <a href="https://www.clever-cloud.com" class="text-primary-500 hover:underline">Clever Cloud</a><br/>
            Code Source sur <a href="https://github.com/afup/planete" class="text-primary-500 hover:underline">GitHub</a>
        </footer>
    </body>
</html>
