CINXE.COM
Symfony and PHP Articles | SymfonyCasts
<!DOCTYPE html> <html lang="en" class="scroll-smooth"> <head prefix="og: http://ogp.me/ns#"> <meta charset="utf-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1"> <meta name="description" content="PHP and Symfony Tutorial Screencasts - with free videos, scripts, and code downloads!"> <link rel="canonical" href="https://symfonycasts.com/blog"> <meta property="og:image" content="https://symfonycasts.com/build/images/og-sfcasts.89bb7107.png"> <title>Symfony and PHP Articles | SymfonyCasts</title> <link rel="stylesheet" href="https://symfonycasts.com/build/150.42a35cc8.css" data-turbo-track="reload"><link rel="stylesheet" href="https://symfonycasts.com/build/tailwind.da1feb6f.css" data-turbo-track="reload"> <link rel="preconnect" href="https://kit.fontawesome.com"> <link rel="preconnect" href="https://api.fontshare.com"> <link rel="stylesheet" href="https://kit.fontawesome.com/f44096511e.css" crossorigin="anonymous"> <script async defer src="https://sa.symfonycasts.com/latest.js"></script> <script src="https://symfonycasts.com/build/runtime.f090d72d.js" defer data-turbo-track="reload"></script><script src="https://symfonycasts.com/build/8764.79cb6dbe.js" defer data-turbo-track="reload"></script><script src="https://symfonycasts.com/build/560.7017a8cd.js" defer data-turbo-track="reload"></script><script src="https://symfonycasts.com/build/4987.fd46174f.js" defer data-turbo-track="reload"></script><script src="https://symfonycasts.com/build/4184.24dfa7a0.js" defer data-turbo-track="reload"></script><script src="https://symfonycasts.com/build/2624.eedc0a93.js" defer data-turbo-track="reload"></script><script src="https://symfonycasts.com/build/969.cbfbbb6b.js" defer data-turbo-track="reload"></script><script src="https://symfonycasts.com/build/4430.b8f58b3a.js" defer data-turbo-track="reload"></script><script src="https://symfonycasts.com/build/4079.d25f5551.js" defer data-turbo-track="reload"></script><script src="https://symfonycasts.com/build/tailwind.1044c30e.js" defer data-turbo-track="reload"></script> </head> <body class="min-h-screen bg-white text-black-8 dark:text-white dark:bg-black-9" data-user-id="" data-is-dark-mode-on="false" > <header data-controller="mobile-menu" class="border-b border-black-2 dark:border-black-8 dark:bg-black-9"> <section class="max-w-screen-2xl mx-auto py-3 px-5 flex justify-between items-center"> <div class="flex grow"> <button data-action="mobile-menu#toggle:prevent" class="md:hidden cursor-pointer relative w-4 h-6 mt-2.5 mr-3"> <div class="bg-black-9 dark:bg-white w-4 h-0.5 rounded absolute top-4 -mt-0.5 transition-all duration-500 before:content-[''] before:bg-black-9 before:dark:bg-white before:w-4 before:h-0.5 before:rounded before:absolute before:transition-all before:duration-500 before:-translate-x-2 before:translate-y-2 after:content-[''] after:bg-black-9 after:dark:bg-white after:w-4 after:h-0.5 after:rounded after:absolute after:transition-all after:duration-500 after:-translate-x-2 after:-translate-y-2"></div> </button> <a href="/" class="text-3xl font-medium"> <div class="bg-[url('../images/symfonycasts-logo-dm.svg')] w-[52px] h-[45px] bg-cover bg-no-repeat min-[1099px]:bg-[url('../images/symfonycasts-logo.svg')] min-[1099px]:dark:bg-[url('../images/symfonycasts-logo-dm.svg')] min-[1099px]:w-[240px] min-[1099px]:bg-contain mr-5" alt="SymfonyCasts Logo"></div> </a> <span class="hidden md:flex md:grow items-center"> <form action="/search" data-controller="rich-search" role="search" aria-expanded="false" class="group w-[228px] aria-expanded:w-full transition-all relative" > <div class="relative"> <div class="absolute inset-y-0 left-0 flex items-center pl-3 pointer-events-none"> <svg aria-hidden="true" class="w-5 h-5 text-black-5" fill="currentColor" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg"><path fill-rule="evenodd" d="M8 4a4 4 0 100 8 4 4 0 000-8zM2 8a6 6 0 1110.89 3.476l4.817 4.817a1 1 0 01-1.414 1.414l-4.816-4.816A6 6 0 012 8z" clip-rule="evenodd"></path></svg> </div> <input data-rich-search-target="input" autocomplete="off" data-action="keydown.meta+k@window->rich-search#openByKey keydown.ctrl+k@window->rich-search#openByKey" value="" name="q" type="text" class="w-full focus:ring-0 focus:ring-offset-0 focus:outline-none group-aria-expanded:border group-aria-expanded:border-blue-6 bg-black-1 border dark:border-black-7 border-black-2 text-black-5 text-sm rounded-lg block pl-10 p-2 dark:bg-black-7 dark:placeholder-black-5 dark:text-white" placeholder="Search Blog Posts" spellcheck="false" aria-label="search" > <input type="hidden" name="types[]" value="blog"> </div> </form> </span> </div> <div class="font-semibold"> <nav class="space-x-1.5 sm:space-x-2 min-[812px]:space-x-3 xl:space-x-5" aria-label="main"> <div class="inline-block md:hidden" data-controller="dropdown" data-dropdown-offset-value="40" data-dropdown-placement-value="bottom" data-dropdown-close-on-click-inside-value="false" data-dropdown-use-overlay-value="true" > <button data-action="dropdown#toggle:prevent" type="button" class="py-1 px-2.5"> <span class="sr-only">Open Search Menu</span> <i class="fas fa-search fa-fw"></i> </button> <div class="absolute z-50 hidden w-auto bg-white rounded-lg shadow dark:bg-black-8 py-5 px-7 after:absolute after:content-[''] after:top-0 after:-translate-y-6 after:left-0 after:right-0 after:mx-auto after:border-[12px] after:w-4 after:border-b-white after:dark:border-b-black-8 after:border-transparent" data-dropdown-target="block" > <form action="/search" data-controller="rich-search" role="search" aria-expanded="false" class="group w-[228px] aria-expanded:w-full transition-all relative" > <div class="relative"> <div class="absolute inset-y-0 left-0 flex items-center pl-3 pointer-events-none"> <svg aria-hidden="true" class="w-5 h-5 text-black-5" fill="currentColor" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg"><path fill-rule="evenodd" d="M8 4a4 4 0 100 8 4 4 0 000-8zM2 8a6 6 0 1110.89 3.476l4.817 4.817a1 1 0 01-1.414 1.414l-4.816-4.816A6 6 0 012 8z" clip-rule="evenodd"></path></svg> </div> <input data-rich-search-target="input" autocomplete="off" data-action="" value="" name="q" type="text" class="w-full focus:ring-0 focus:ring-offset-0 focus:outline-none group-aria-expanded:border group-aria-expanded:border-blue-6 bg-black-1 border dark:border-black-7 border-black-2 text-black-5 text-sm rounded-lg block pl-10 p-2 dark:bg-black-7 dark:placeholder-black-5 dark:text-white" placeholder="Search Blog Posts" spellcheck="false" aria-label="search" > <input type="hidden" name="types[]" value="blog"> </div> </form> <h4 class="pt-4 pb-3 text-sm text-black-4 font-normal">Popular Search Topics</h4> <ul class="list-none font-semibold text-lg gap-3"> <li> <a href="/search?q=API%20Platform"> API Platform </a> </li> <li> <a href="/search?q=Doctrine"> Doctrine </a> </li> <li> <a href="/search?q=Turbo"> Turbo </a> </li> <li> <a href="/search?q=EasyAdmin"> EasyAdmin </a> </li> </ul> </div> </div> <div class="hidden md:inline-block" data-controller="dropdown" data-dropdown-offset-value="20" data-dropdown-placement-value="bottom" data-dropdown-close-on-click-inside-value="true" data-dropdown-use-overlay-value="false" > <a href="/courses" class="hover:text-blue-6">Tutorials</a> <button data-action="dropdown#toggle:prevent" type="button" class=""> <i class="fa-regular fa-ellipsis pl-1 hover:text-blue-6"></i> </button> <div class="z-50 absolute hidden w-auto bg-white divide-gray-100 rounded-lg shadow dark:bg-gray-700 dark:divide-gray-600 py-5 px-7" data-dropdown-target="block" > <a href="/courses" class="hover:text-blue-6"><span class="text-lg font-semibold underline">View all Courses</span> <span class="font-sm font-normal">(123)</span></a> <div class="grid grid-cols-2"> <div class="py-[6px] px-[6px] font-normal"> <a class="hover:text-blue-6" href="/tracks/symfony"><i class="fa-solid fa-circle-small pr-3 text-[10px]" style="color: #06E7FC"></i>Symfony 7</a> </div> <div class="py-[6px] px-[6px] font-normal"> <a class="hover:text-blue-6" href="/tracks/symfony6"><i class="fa-solid fa-circle-small pr-3 text-[10px]" style="color: #6B02F7"></i>Symfony 6</a> </div> <div class="py-[6px] px-[6px] font-normal"> <a class="hover:text-blue-6" href="/tracks/symfony5"><i class="fa-solid fa-circle-small pr-3 text-[10px]" style="color: #A6F124"></i>Symfony 5</a> </div> <div class="py-[6px] px-[6px] font-normal"> <a class="hover:text-blue-6" href="/tracks/rest"><i class="fa-solid fa-circle-small pr-3 text-[10px]" style="color: #7BE89B"></i>APIs</a> </div> <div class="py-[6px] px-[6px] font-normal"> <a class="hover:text-blue-6" href="/tracks/js-tools"><i class="fa-solid fa-circle-small pr-3 text-[10px]" style="color: #ED268F"></i>JavaScript Frameworks & Tools</a> </div> <div class="py-[6px] px-[6px] font-normal"> <a class="hover:text-blue-6" href="/tracks/javascript"><i class="fa-solid fa-circle-small pr-3 text-[10px]" style="color: #ED268F"></i>JavaScript Fundamentals</a> </div> <div class="py-[6px] px-[6px] font-normal"> <a class="hover:text-blue-6" href="/tracks/testing"><i class="fa-solid fa-circle-small pr-3 text-[10px]" style="color: #E7E517"></i>Testing</a> </div> <div class="py-[6px] px-[6px] font-normal"> <a class="hover:text-blue-6" href="/tracks/drupal"><i class="fa-solid fa-circle-small pr-3 text-[10px]" style="color: #AF04F6"></i>Drupal 8</a> </div> <div class="py-[6px] px-[6px] font-normal"> <a class="hover:text-blue-6" href="/tracks/oo"><i class="fa-solid fa-circle-small pr-3 text-[10px]" style="color: #3502ED"></i>OOP</a> </div> <div class="py-[6px] px-[6px] font-normal"> <a class="hover:text-blue-6" href="/tracks/php"><i class="fa-solid fa-circle-small pr-3 text-[10px]" style="color: #07DBDE"></i>PHP</a> </div> <div class="py-[6px] px-[6px] font-normal"> <a class="hover:text-blue-6" href="/tracks/extras"><i class="fa-solid fa-circle-small pr-3 text-[10px]" style="color: #E645CD"></i>Dev Tools</a> </div> </div> </div> </div> <a href="/gift-card/" class="hover:text-blue-6 hidden lg:inline">Gift Card</a> <a class="hover:text-blue-6 hidden lg:inline" href="/pricing">Pricing</a> <span class="hidden lg:inline border-r border-black-3 dark:border-black-6"></span> <div class="inline-block" data-controller="dropdown" data-dropdown-offset-value="40" data-dropdown-placement-value="bottom" data-dropdown-close-on-click-inside-value="true" data-dropdown-use-overlay-value="false" > <button data-action="dropdown#toggle:prevent" type="button" class="test-notifications-bell rounded-full py-1 px-2.5 hover:bg-black-1 hover:dark:bg-black-7 active:dark:bg-blue-8 active:dark:text-blue-5 active:bg-blue-1 active:text-blue-6"> <i class="fa fa-bell fa-fw relative"> <div class="bg-red-500 border-2 border-white dark:border-black-8 rounded-full h-[10px] w-[10px] absolute right-[-2px] top-[-2px]"></div> </i> </button> <div class="z-50 absolute h-[580px] overflow-y-scroll hidden md:2w-[530px] bg-white divide-y divide-gray-100 rounded-lg shadow dark:bg-gray-700 dark:divide-gray-600 py-5 px-7 after:absolute after:content-[''] after:top-0 after:-translate-y-6 after:right-5 after:border-[12px] after:w-4 after:border-b-white after:dark:border-b-gray-700 after:border-transparent" data-dropdown-target="block" > <div class="flex justify-between"> <span class="text-lg font-semibold pb-4">Notifications</span> </div> <div class="flex pt-7"> <turbo-frame id="user-notifications-page1" src="/updates" loading="lazy" target="_top"> Loading more entries <i class="fa fa-spinner fa-spin"></i> </turbo-frame> </div> </div> </div> <a href="#" class="nav-link py-1 px-2.5 hover:text-blue-6" data-controller="dark-mode-toggle" data-dark-mode-toggle-url-value="/api/set-dark-mode" data-dark-mode-toggle-class-name-value="dark" data-action="dark-mode-toggle#toggle:prevent" ><i class="fa fa-adjust fa-fw"></i></a> <span class="whitespace-nowrap"> <a class="btn-secondary-sm mr-2 whitespace-nowrap hidden md:inline-block" href="/login">Log In</a> <a class="btn-blue-sm whitespace-nowrap inline-block" href="/signup">Sign Up</a> </span> </nav> </div> </section> <section data-mobile-menu-target="menu" class="absolute top-68 z-40 border-b border-black-2 dark:border-black-7 bg-white dark:bg-black-8 w-full text-2xl flex-col origin-top animate-open-menu hidden"> <nav class="flex flex-col justify-between min-h-screen py-8" aria-label="mobile"> <div class="flex flex-col gap-2.5 p-0"> <div data-controller="toggle" data-toggle-button-toggle-classes-value="fa-angle-down fa-angle-up" data-toggle-hidden-classes-value="h-0 py-0" data-toggle-shown-classes-value="py-5" data-toggle-transition-height-value="true" > <div class="flex justify-between px-5"> <a href="/courses" class="hover:text-blue-6"> Tutorials </a> <button data-action="toggle#toggle:prevent"> <i class="fa-regular fa-angle-down pl-2 hover:text-blue-6"></i> </button> </div> <div class="bg-black-1 dark:bg-black-7 px-5 py-5 hidden overflow-hidden transition-all duration-500" data-toggle-target="content"> <span class="text-xs font-medium">Tracks (11)</span> <div class="py-[6px] px-[6px] text-base font-normal"> <a class="hover:text-blue-6" href="/tracks/symfony"><i class="fa-solid fa-circle-small pr-3 text-[10px]"></i>Symfony 7</a> </div> <div class="py-[6px] px-[6px] text-base font-normal"> <a class="hover:text-blue-6" href="/tracks/symfony6"><i class="fa-solid fa-circle-small pr-3 text-[10px]"></i>Symfony 6</a> </div> <div class="py-[6px] px-[6px] text-base font-normal"> <a class="hover:text-blue-6" href="/tracks/symfony5"><i class="fa-solid fa-circle-small pr-3 text-[10px]"></i>Symfony 5</a> </div> <div class="py-[6px] px-[6px] text-base font-normal"> <a class="hover:text-blue-6" href="/tracks/rest"><i class="fa-solid fa-circle-small pr-3 text-[10px]"></i>APIs</a> </div> <div class="py-[6px] px-[6px] text-base font-normal"> <a class="hover:text-blue-6" href="/tracks/js-tools"><i class="fa-solid fa-circle-small pr-3 text-[10px]"></i>JavaScript Frameworks & Tools</a> </div> <div class="py-[6px] px-[6px] text-base font-normal"> <a class="hover:text-blue-6" href="/tracks/javascript"><i class="fa-solid fa-circle-small pr-3 text-[10px]"></i>JavaScript Fundamentals</a> </div> <div class="py-[6px] px-[6px] text-base font-normal"> <a class="hover:text-blue-6" href="/tracks/testing"><i class="fa-solid fa-circle-small pr-3 text-[10px]"></i>Testing</a> </div> <div class="py-[6px] px-[6px] text-base font-normal"> <a class="hover:text-blue-6" href="/tracks/drupal"><i class="fa-solid fa-circle-small pr-3 text-[10px]"></i>Drupal 8</a> </div> <div class="py-[6px] px-[6px] text-base font-normal"> <a class="hover:text-blue-6" href="/tracks/oo"><i class="fa-solid fa-circle-small pr-3 text-[10px]"></i>OOP</a> </div> <div class="py-[6px] px-[6px] text-base font-normal"> <a class="hover:text-blue-6" href="/tracks/php"><i class="fa-solid fa-circle-small pr-3 text-[10px]"></i>PHP</a> </div> <div class="py-[6px] px-[6px] text-base font-normal"> <a class="hover:text-blue-6" href="/tracks/extras"><i class="fa-solid fa-circle-small pr-3 text-[10px]"></i>Dev Tools</a> </div> <a href="/courses" class="hover:text-blue-6"><span class="text-lg font-semibold underline">View all Courses</span> <span class="text-xs font-normal">(123)</span></a> </div> </div> <a href="/gift-card/" class="hover:text-blue-6 px-5"> Gift Card </a> <a class="hover:text-blue-6 px-5" href="/pricing">Pricing</a> </div> <div class="flex flex-col px-3"> <a class="btn-secondary-sm text-center" href="/login">Log In</a> <a class="btn-blue-sm text-center mt-2.5" href="/signup">Sign Up</a> </div> </nav> </section> </header> <main class="mx-auto"> <div class="md:h-40 bg-gradient-to-b from-[#C4E1F1] to-headerBlue px-5 md:px-14 dark:from-[#074A6F] dark:to-headerBlueDm"> <div class="block md:flex md:justify-between border-b border-black-3 dark:border-black-6 max-w-7xl mx-auto"> <h1 class="text-6xl font-semibold pt-7 pb-3 md:pt-12 md:pb-12">Blog</h1> <div class="md:pt-8 md:text-left"> <p class="text-sm font-medium pb-7 md:pb-2">Subscribe via <a class="underline text-blue-6" href="https://feeds.feedburner.com/knpuniversity">RSS</a> or hear about updates first with our newsletter.</p> <form id="js-newsletter-form" method="GET" action="/signup"> <div class="flex items-center w-full max-w-md mb-3"> <div class="relative w-full mr-3"> <label for="subscriber_email" class="hidden">Email address</label> <div class="absolute inset-y-0 left-0 flex items-center md:pl-3.5 pointer-events-none"> <svg class="hidden md:block w-3.5 h-3.5 text-gray-500 dark:text-gray-400" aria-hidden="true" xmlns="http://www.w3.org/2000/svg" fill="currentColor" viewBox="0 0 20 16"> <path d="m10.036 8.278 9.258-7.79A1.979 1.979 0 0 0 18 0H2A1.987 1.987 0 0 0 .641.541l9.395 7.737Z"></path> <path d="M11.241 9.817c-.36.275-.801.425-1.255.427-.428 0-.845-.138-1.187-.395L0 2.6V14a2 2 0 0 0 2 2h16a2 2 0 0 0 2-2V2.5l-8.759 7.317Z"></path> </svg> </div> <input id="subscriber_email" class="bg-gray-50 border border-gray-300 text-gray-900 text-sm rounded-lg focus:ring-blue-500 focus:border-blue-500 block w-full md:pl-10 p-2.5 dark:bg-gray-700 dark:border-gray-600 dark:placeholder-gray-400 dark:text-white dark:focus:ring-blue-500 dark:focus:border-blue-500" name="email" aria-label="Email Address" placeholder="Email" required="" type="email"> </div> <button data-element="submit"> <span class="btn-blue-lg">Subscribe</span> </button> </div> </form> </div> </div> </div> <div class="mx-auto px-5 md:px-14 pt-12 max-w-6xl"> <ul class="list-unstyled js-blog-list"> <li class="mb-5"> <div class="md:flex"> <a class="min-w-fit" href="/blog/advanced-mailto-with-symfony-mailer"><img class="mb-5 md:mb-0 inline content-center h-[206px] w-auto md:h-[158px] md:w-[253px] object-cover rounded-3xl hover:scale-105 transition duration-500 cursor-pointer" src="https://symfonycasts.com/static/media/cache/blog_image/uploads/blog/advanced-mailto-with-symfony-mailer.png" alt="Ditch mailto Links: Pre-Fill & even Attach Files with Symfony Mailer (.eml Magic!) image"></a> <div class="md:ml-3 grow min-w-0"> <p class="js-blog-author-info pb-1 md:pb-0"> Mar 19th 2025 <span class="px-1 text-black-4">|</span> By <a href="https://github.com/kbond">kbond</a> </p> <h2 class="text-2xl font-semibold"> <a class="hover:text-blue-6" href="/blog/advanced-mailto-with-symfony-mailer">Ditch mailto Links: Pre-Fill & even Attach Files with Symfony Mailer (.eml Magic!)</a> </h2> <p>The <code>mailto:</code> link is a simple way to open an email client with a pre-filled email. But what if you want this email to have a pre-filled attachment? Let's dive into how to do this with Symfony Mailer. </div> </div> </li> <li class="mb-5"> <div class="md:flex"> <a class="min-w-fit" href="/blog/mailtrap"><img class="mb-5 md:mb-0 inline content-center h-[206px] w-auto md:h-[158px] md:w-[253px] object-cover rounded-3xl hover:scale-105 transition duration-500 cursor-pointer" src="https://symfonycasts.com/static/media/cache/blog_image/uploads/blog/mailtrap.png" alt="Mailtrap Tutorial (Free) = Mailer + Webhook + Contributing back to Symfony image"></a> <div class="md:ml-3 grow min-w-0"> <p class="js-blog-author-info pb-1 md:pb-0"> Mar 1st 2025 <span class="px-1 text-black-4">|</span> By <a href="https://github.com/weaverryan">weaverryan</a> and <a href="https://github.com/kbond">kbond</a> </p> <h2 class="text-2xl font-semibold"> <a class="hover:text-blue-6" href="/blog/mailtrap">Mailtrap Tutorial (Free) = Mailer + Webhook + Contributing back to Symfony</a> </h2> <p>The free Mailtrap tutorial is here! It's all about the Mailer & Webhook components with the joy of previewing emails in a sandbox. As a bonus, this tutorial triggered several contributions back to Symfony! </div> </div> </li> <li class="mb-5"> <div class="md:flex"> <a class="min-w-fit" href="/blog/2024-november-oss-roundup"><img class="mb-5 md:mb-0 inline content-center h-[206px] w-auto md:h-[158px] md:w-[253px] object-cover rounded-3xl hover:scale-105 transition duration-500 cursor-pointer" src="https://symfonycasts.com/static/media/cache/blog_image/uploads/blog/2024-november-oss-roundup.png" alt="SymfonyCasts November Open Source Roundup! image"></a> <div class="md:ml-3 grow min-w-0"> <p class="js-blog-author-info pb-1 md:pb-0"> Nov 18th 2024 <span class="px-1 text-black-4">|</span> By <a href="https://github.com/Leannapelham">Leannapelham</a> </p> <h2 class="text-2xl font-semibold"> <a class="hover:text-blue-6" href="/blog/2024-november-oss-roundup">SymfonyCasts November Open Source Roundup!</a> </h2> <p>This month we've got 6 SymfonyCasts open source releases, let's take a quick look at what's new and give a huge thanks to all the contributors who helped make these releases happen! </div> </div> </li> <li class="mb-5"> <div class="md:flex"> <a class="min-w-fit" href="/blog/use-symfony-reproducer"><img class="mb-5 md:mb-0 inline content-center h-[206px] w-auto md:h-[158px] md:w-[253px] object-cover rounded-3xl hover:scale-105 transition duration-500 cursor-pointer" src="https://symfonycasts.com/static/media/cache/blog_image/uploads/blog/use-symfony-reproducer.png" alt="Using a Symfony Reproducer image"></a> <div class="md:ml-3 grow min-w-0"> <p class="js-blog-author-info pb-1 md:pb-0"> Sep 27th 2024 <span class="px-1 text-black-4">|</span> By <a href="https://github.com/kbond">kbond</a> </p> <h2 class="text-2xl font-semibold"> <a class="hover:text-blue-6" href="/blog/use-symfony-reproducer">Using a Symfony Reproducer</a> </h2> <p>Now that you've created a Symfony reproducer, let's use it to fix a bug in Symfony or verify a fix proposed by someone else. We'll fork the Symfony repository, link our reproducer to it, and make the necessary changes. </div> </div> </li> <li class="mb-5"> <div class="md:flex"> <a class="min-w-fit" href="/blog/symfony-reproducer"><img class="mb-5 md:mb-0 inline content-center h-[206px] w-auto md:h-[158px] md:w-[253px] object-cover rounded-3xl hover:scale-105 transition duration-500 cursor-pointer" src="https://symfonycasts.com/static/media/cache/blog_image/uploads/blog/symfony-reproducer.png" alt="Creating a Symfony Reproducer image"></a> <div class="md:ml-3 grow min-w-0"> <p class="js-blog-author-info pb-1 md:pb-0"> Jul 16th 2024 <span class="px-1 text-black-4">|</span> By <a href="https://github.com/kbond">kbond</a>, <a href="https://github.com/sadikoff">sadikoff</a>, and <a href="https://github.com/bocharsky-bw">bocharsky-bw</a> </p> <h2 class="text-2xl font-semibold"> <a class="hover:text-blue-6" href="/blog/symfony-reproducer">Creating a Symfony Reproducer</a> </h2> <p>Oh snap! You've discovered what you suspect is a bug in Symfony. Don't despair, Symfony is open source so there are many ways you can help get it resolved. Let's look at how to create a reproducer to help other contributors understand the issue and find a solution. </div> </div> </li> <li class="mb-5"> <div class="md:flex"> <a class="min-w-fit" href="/blog/zenstruck-joins-symfonycasts"><img class="mb-5 md:mb-0 inline content-center h-[206px] w-auto md:h-[158px] md:w-[253px] object-cover rounded-3xl hover:scale-105 transition duration-500 cursor-pointer" src="https://symfonycasts.com/static/media/cache/blog_image/uploads/blog/zenstruck-joins-symfonycasts.png" alt="Kevin Bond (aka Zenstruck) joins SymfonyCasts image"></a> <div class="md:ml-3 grow min-w-0"> <p class="js-blog-author-info pb-1 md:pb-0"> May 21st 2024 <span class="px-1 text-black-4">|</span> By <a href="https://github.com/weaverryan">weaverryan</a> and <a href="https://github.com/Leannapelham">Leannapelham</a> </p> <h2 class="text-2xl font-semibold"> <a class="hover:text-blue-6" href="/blog/zenstruck-joins-symfonycasts">Kevin Bond (aka Zenstruck) joins SymfonyCasts</a> </h2> <p>Kevin Bond (aka Zenstruck) is joining forces with us as a head tutorial writer. This means tutorials created by Kevin in the SymfonyCasts style you know and love. It also means the ability for us to make more content about more libraries and solutions around the Symfony ecosystem. </div> </div> </li> <li class="mb-5"> <div class="md:flex"> <a class="min-w-fit" href="/blog/ryan-brain-cancer"><img class="mb-5 md:mb-0 inline content-center h-[206px] w-auto md:h-[158px] md:w-[253px] object-cover rounded-3xl hover:scale-105 transition duration-500 cursor-pointer" src="https://symfonycasts.com/static/media/cache/blog_image/uploads/blog/ryan-brain-cancer.png" alt="Ryan has Incurable Brain Cancer - but SymfonyCasts is Strong image"></a> <div class="md:ml-3 grow min-w-0"> <p class="js-blog-author-info pb-1 md:pb-0"> Apr 10th 2024 <span class="px-1 text-black-4">|</span> By <a href="https://github.com/weaverryan">weaverryan</a> </p> <h2 class="text-2xl font-semibold"> <a class="hover:text-blue-6" href="/blog/ryan-brain-cancer">Ryan has Incurable Brain Cancer - but SymfonyCasts is Strong</a> </h2> <p>Bad News: Ryan has incurable brain cancer. Good News: SymfonyCasts is still going strong. Best news: we're fighting it with everything we've got & have amazing support from the community. </div> </div> </li> <li class="mb-5"> <div class="md:flex"> <a class="min-w-fit" href="/blog/live-stream-11"><img class="mb-5 md:mb-0 inline content-center h-[206px] w-auto md:h-[158px] md:w-[253px] object-cover rounded-3xl hover:scale-105 transition duration-500 cursor-pointer" src="https://symfonycasts.com/static/media/cache/blog_image/uploads/blog/live-stream-11.png" alt="Live Stream #11: Turbo Morph Updates & Autocomplete morphing work image"></a> <div class="md:ml-3 grow min-w-0"> <p class="js-blog-author-info pb-1 md:pb-0"> Feb 28th 2024 <span class="px-1 text-black-4">|</span> By <a href="https://github.com/weaverryan">weaverryan</a> and <a href="https://github.com/sadikoff">sadikoff</a> </p> <h2 class="text-2xl font-semibold"> <a class="hover:text-blue-6" href="/blog/live-stream-11">Live Stream #11: Turbo Morph Updates & Autocomplete morphing work</a> </h2> <p>Live stream from Feb 28th where we get some updates on the "active value" change in Turbo 8 morphing. Then we dive into work on a PR for the autocomplete component: making it morph-ready... which is tricky! </div> </div> </li> <li class="mb-5"> <div class="md:flex"> <a class="min-w-fit" href="/blog/redirect-turbo-frame"><img class="mb-5 md:mb-0 inline content-center h-[206px] w-auto md:h-[158px] md:w-[253px] object-cover rounded-3xl hover:scale-105 transition duration-500 cursor-pointer" src="https://symfonycasts.com/static/media/cache/blog_image/uploads/blog/redirect-turbo-frame.png" alt="Live Components + Turbo Streams: Navigating a Turbo Frame image"></a> <div class="md:ml-3 grow min-w-0"> <p class="js-blog-author-info pb-1 md:pb-0"> Feb 26th 2024 <span class="px-1 text-black-4">|</span> By <a href="https://github.com/weaverryan">weaverryan</a> </p> <h2 class="text-2xl font-semibold"> <a class="hover:text-blue-6" href="/blog/redirect-turbo-frame">Live Components + Turbo Streams: Navigating a Turbo Frame</a> </h2> <p>When you redirect from a <code>LiveAction</code>, LiveComponents, naturally, will perform a full page redirect (or redirect via <code>Turbo</code> if it's available. But what if you want to navigate a Turbo frame? The answer lies in some clever use of Turbo Streams. </div> </div> </li> <li class="mb-5"> <div class="md:flex"> <a class="min-w-fit" href="/blog/live-stream-10"><img class="mb-5 md:mb-0 inline content-center h-[206px] w-auto md:h-[158px] md:w-[253px] object-cover rounded-3xl hover:scale-105 transition duration-500 cursor-pointer" src="https://symfonycasts.com/static/media/cache/blog_image/uploads/blog/live-stream-10.png" alt="Live Stream #10: Finishing the LiveComponents data-live-action-args Syntax Change image"></a> <div class="md:ml-3 grow min-w-0"> <p class="js-blog-author-info pb-1 md:pb-0"> Feb 20th 2024 <span class="px-1 text-black-4">|</span> By <a href="https://github.com/weaverryan">weaverryan</a> </p> <h2 class="text-2xl font-semibold"> <a class="hover:text-blue-6" href="/blog/live-stream-10">Live Stream #10: Finishing the LiveComponents data-live-action-args Syntax Change</a> </h2> <p>Live stream from Feb 20th where we do some open source maintenance on Symfony UX, merge some PR's then finish the <code>data-live-action-args</code> pull request that we first discussed several weeks ago. Good work towards LiveComponents stable! </div> </div> </li> <li class="mb-5"> <div class="md:flex"> <a class="min-w-fit" href="/blog/live-stream-9"><img class="mb-5 md:mb-0 inline content-center h-[206px] w-auto md:h-[158px] md:w-[253px] object-cover rounded-3xl hover:scale-105 transition duration-500 cursor-pointer" src="https://symfonycasts.com/static/media/cache/blog_image/uploads/blog/live-stream-9.png" alt="Live Stream #9: Turbo 8, Live Components & Challenges in Morphing image"></a> <div class="md:ml-3 grow min-w-0"> <p class="js-blog-author-info pb-1 md:pb-0"> Feb 14th 2024 <span class="px-1 text-black-4">|</span> By <a href="https://github.com/weaverryan">weaverryan</a> </p> <h2 class="text-2xl font-semibold"> <a class="hover:text-blue-6" href="/blog/live-stream-9">Live Stream #9: Turbo 8, Live Components & Challenges in Morphing</a> </h2> <p>Live stream from Feb 14th where we dive Turbo 8, view transitions, and "morphing": the key tech behind LiveComponents & a new feature in Turbo 8. We work on how to make our Stimulus controllers morph-ready. </div> </div> </li> <li class="mb-5"> <div class="md:flex"> <a class="min-w-fit" href="/blog/live-stream-8"><img class="mb-5 md:mb-0 inline content-center h-[206px] w-auto md:h-[158px] md:w-[253px] object-cover rounded-3xl hover:scale-105 transition duration-500 cursor-pointer" src="https://symfonycasts.com/static/media/cache/blog_image/uploads/blog/live-stream-8.png" alt="Live Stream #8: Live Component JavaScript Internals image"></a> <div class="md:ml-3 grow min-w-0"> <p class="js-blog-author-info pb-1 md:pb-0"> Feb 7th 2024 <span class="px-1 text-black-4">|</span> By <a href="https://github.com/weaverryan">weaverryan</a> </p> <h2 class="text-2xl font-semibold"> <a class="hover:text-blue-6" href="/blog/live-stream-8">Live Stream #8: Live Component JavaScript Internals</a> </h2> <p>Live stream from Feb 7th where we dive into the JavaScript behind the Live Components package: the Stimulus controller, Component objects, how re-rendering happens & the internal plugins system. Yes, this one gets TECHY. </div> </div> </li> <li class="mb-5"> <div class="md:flex"> <a class="min-w-fit" href="/blog/live-stream-7"><img class="mb-5 md:mb-0 inline content-center h-[206px] w-auto md:h-[158px] md:w-[253px] object-cover rounded-3xl hover:scale-105 transition duration-500 cursor-pointer" src="https://symfonycasts.com/static/media/cache/blog_image/uploads/blog/live-stream-7.png" alt="Live Stream #7: Let's build some Twig UI Components image"></a> <div class="md:ml-3 grow min-w-0"> <p class="js-blog-author-info pb-1 md:pb-0"> Jan 31st 2024 <span class="px-1 text-black-4">|</span> By <a href="https://github.com/weaverryan">weaverryan</a> </p> <h2 class="text-2xl font-semibold"> <a class="hover:text-blue-6" href="/blog/live-stream-7">Live Stream #7: Let's build some Twig UI Components</a> </h2> <p>Live stream from Jan 31st where we talk about Twig attribute syntax proposal, the new "URL" binding feature in LiveComponents and then dive into building a "Tooltip" Twig component / recipe for a proposed new section of the UX site. </div> </div> </li> <li class="mb-5"> <div class="md:flex"> <a class="min-w-fit" href="/blog/live-stream-6"><img class="mb-5 md:mb-0 inline content-center h-[206px] w-auto md:h-[158px] md:w-[253px] object-cover rounded-3xl hover:scale-105 transition duration-500 cursor-pointer" src="https://symfonycasts.com/static/media/cache/blog_image/uploads/blog/live-stream-6.png" alt="Live Stream #6: Building v2 of our TutsHero Tutorial-building Tool image"></a> <div class="md:ml-3 grow min-w-0"> <p class="js-blog-author-info pb-1 md:pb-0"> Jan 24th 2024 <span class="px-1 text-black-4">|</span> By <a href="https://github.com/weaverryan">weaverryan</a> </p> <h2 class="text-2xl font-semibold"> <a class="hover:text-blue-6" href="/blog/live-stream-6">Live Stream #6: Building v2 of our TutsHero Tutorial-building Tool</a> </h2> <p>Live stream from Jan 24th where we talk about HTTP caching, brainstorming the "attributes" variable for Twig Component & some hacking on our internal tutorial-building tool: TutsHero. </div> </div> </li> <li class="mb-5"> <div class="md:flex"> <a class="min-w-fit" href="/blog/doctrine-hidden"><img class="mb-5 md:mb-0 inline content-center h-[206px] w-auto md:h-[158px] md:w-[253px] object-cover rounded-3xl hover:scale-105 transition duration-500 cursor-pointer" src="https://symfonycasts.com/static/media/cache/blog_image/uploads/blog/doctrine-hidden.png" alt="Doctrine's HIDDEN gem image"></a> <div class="md:ml-3 grow min-w-0"> <p class="js-blog-author-info pb-1 md:pb-0"> Jan 23rd 2024 <span class="px-1 text-black-4">|</span> By <a href="https://github.com/weaverryan">weaverryan</a> and <a href="https://github.com/Leannapelham">Leannapelham</a> </p> <h2 class="text-2xl font-semibold"> <a class="hover:text-blue-6" href="/blog/doctrine-hidden">Doctrine's HIDDEN gem</a> </h2> <p>Using Doctrine's HIDDEN doesn't come up often but it is a great tool to have when you need it! </div> </div> </li> <li class="mb-5"> <div class="md:flex"> <a class="min-w-fit" href="/blog/live-stream-5"><img class="mb-5 md:mb-0 inline content-center h-[206px] w-auto md:h-[158px] md:w-[253px] object-cover rounded-3xl hover:scale-105 transition duration-500 cursor-pointer" src="https://symfonycasts.com/static/media/cache/blog_image/uploads/blog/live-stream-5.png" alt="Live Stream #5: A Day in the Life of Getting Live Components to stable image"></a> <div class="md:ml-3 grow min-w-0"> <p class="js-blog-author-info pb-1 md:pb-0"> Jan 17th 2024 <span class="px-1 text-black-4">|</span> By <a href="https://github.com/weaverryan">weaverryan</a> </p> <h2 class="text-2xl font-semibold"> <a class="hover:text-blue-6" href="/blog/live-stream-5">Live Stream #5: A Day in the Life of Getting Live Components to stable</a> </h2> <p>Live stream from Jan 17th where we talk about the steps to getting live components to a stable release and triage a few technical issues. </div> </div> </li> <li class="mb-5"> <div class="md:flex"> <a class="min-w-fit" href="/blog/2023-review"><img class="mb-5 md:mb-0 inline content-center h-[206px] w-auto md:h-[158px] md:w-[253px] object-cover rounded-3xl hover:scale-105 transition duration-500 cursor-pointer" src="https://symfonycasts.com/static/media/cache/blog_image/uploads/blog/2023-review.png" alt="2023: A Year in Tutorials & Open Source image"></a> <div class="md:ml-3 grow min-w-0"> <p class="js-blog-author-info pb-1 md:pb-0"> Jan 10th 2024 <span class="px-1 text-black-4">|</span> By <a href="https://github.com/weaverryan">weaverryan</a> </p> <h2 class="text-2xl font-semibold"> <a class="hover:text-blue-6" href="/blog/2023-review">2023: A Year in Tutorials & Open Source</a> </h2> <p>Let's peek back at 2023: the tutorials we created & the open source initiatives that you helped us push forward. </div> </div> </li> <li class="mb-5"> <div class="md:flex"> <a class="min-w-fit" href="/blog/preloading"><img class="mb-5 md:mb-0 inline content-center h-[206px] w-auto md:h-[158px] md:w-[253px] object-cover rounded-3xl hover:scale-105 transition duration-500 cursor-pointer" src="https://symfonycasts.com/static/media/cache/blog_image/uploads/blog/preloading.png" alt="Preloading Assets for Fun & Performance image"></a> <div class="md:ml-3 grow min-w-0"> <p class="js-blog-author-info pb-1 md:pb-0"> Dec 12th 2023 <span class="px-1 text-black-4">|</span> By <a href="https://github.com/weaverryan">weaverryan</a> </p> <h2 class="text-2xl font-semibold"> <a class="hover:text-blue-6" href="/blog/preloading">Preloading Assets for Fun & Performance</a> </h2> <p>Want your site to fly? Preload your assets! This happens automatically in AssetMapper, but let's learn how it works anyway! </div> </div> </li> <li class="mb-5"> <div class="md:flex"> <a class="min-w-fit" href="/blog/30-days-last-stack-free"><img class="mb-5 md:mb-0 inline content-center h-[206px] w-auto md:h-[158px] md:w-[253px] object-cover rounded-3xl hover:scale-105 transition duration-500 cursor-pointer" src="https://symfonycasts.com/static/media/cache/blog_image/uploads/blog/30-days-last-stack-free.png" alt="30 Days of LAST Stack Tutorial Free until Jan 15th image"></a> <div class="md:ml-3 grow min-w-0"> <p class="js-blog-author-info pb-1 md:pb-0"> Nov 30th 2023 <span class="px-1 text-black-4">|</span> By <a href="https://github.com/weaverryan">weaverryan</a> </p> <h2 class="text-2xl font-semibold"> <a class="hover:text-blue-6" href="/blog/30-days-last-stack-free">30 Days of LAST Stack Tutorial Free until Jan 15th</a> </h2> <p>To celebrate the release of Symfony 7 & a stable AssetMapper, we're releasing a 30 day LAST stack tutorial starting December 1st. And, it's free until Jan 15th! Share the love. </div> </div> </li> <li class="mb-5"> <div class="md:flex"> <a class="min-w-fit" href="/blog/stop-combining-files"><img class="mb-5 md:mb-0 inline content-center h-[206px] w-auto md:h-[158px] md:w-[253px] object-cover rounded-3xl hover:scale-105 transition duration-500 cursor-pointer" src="https://symfonycasts.com/static/media/cache/blog_image/uploads/blog/stop-combining-files.png" alt="Stop Combining CSS & JS! + Performance Revisited image"></a> <div class="md:ml-3 grow min-w-0"> <p class="js-blog-author-info pb-1 md:pb-0"> Nov 14th 2023 <span class="px-1 text-black-4">|</span> By <a href="https://github.com/weaverryan">weaverryan</a> </p> <h2 class="text-2xl font-semibold"> <a class="hover:text-blue-6" href="/blog/stop-combining-files">Stop Combining CSS & JS! + Performance Revisited</a> </h2> <p>Combining files to minimize requests is a relic to of the past. It's time to stop. </div> </div> </li> <li class="mb-5"> <div class="md:flex"> <a class="min-w-fit" href="/blog/myth-imports-need-build"><img class="mb-5 md:mb-0 inline content-center h-[206px] w-auto md:h-[158px] md:w-[253px] object-cover rounded-3xl hover:scale-105 transition duration-500 cursor-pointer" src="https://symfonycasts.com/static/media/cache/blog_image/uploads/blog/myth-imports-need-build.png" alt="Myth: JS imports need a Build System image"></a> <div class="md:ml-3 grow min-w-0"> <p class="js-blog-author-info pb-1 md:pb-0"> Nov 9th 2023 <span class="px-1 text-black-4">|</span> By <a href="https://github.com/weaverryan">weaverryan</a> </p> <h2 class="text-2xl font-semibold"> <a class="hover:text-blue-6" href="/blog/myth-imports-need-build">Myth: JS imports need a Build System</a> </h2> <p>One of the biggest reasons to use a bundler is <code>import</code> and <code>export</code>. But guess what? These work in your browser just fine.` </div> </div> </li> <li class="mb-5"> <div class="md:flex"> <a class="min-w-fit" href="/blog/last-stack"><img class="mb-5 md:mb-0 inline content-center h-[206px] w-auto md:h-[158px] md:w-[253px] object-cover rounded-3xl hover:scale-105 transition duration-500 cursor-pointer" src="https://symfonycasts.com/static/media/cache/blog_image/uploads/blog/last-stack.png" alt="Your LAST Stack image"></a> <div class="md:ml-3 grow min-w-0"> <p class="js-blog-author-info pb-1 md:pb-0"> Nov 6th 2023 <span class="px-1 text-black-4">|</span> By <a href="https://github.com/weaverryan">weaverryan</a> and <a href="https://github.com/stof">stof</a> </p> <h2 class="text-2xl font-semibold"> <a class="hover:text-blue-6" href="/blog/last-stack">Your LAST Stack</a> </h2> <p>Introducing LAST Stack: A simple, no-build, high-performance, stack made up of Live Components, AssetMapper, Stimulus & Turbo. </div> </div> </li> <li class="mb-5"> <div class="md:flex"> <a class="min-w-fit" href="/blog/cat-gpt"><img class="mb-5 md:mb-0 inline content-center h-[206px] w-auto md:h-[158px] md:w-[253px] object-cover rounded-3xl hover:scale-105 transition duration-500 cursor-pointer" src="https://symfonycasts.com/static/media/cache/blog_image/uploads/blog/cat-gpt.png" alt="Introducing Cat GPT image"></a> <div class="md:ml-3 grow min-w-0"> <p class="js-blog-author-info pb-1 md:pb-0"> Apr 1st 2023 <span class="px-1 text-black-4">|</span> By <a href="https://github.com/weaverryan">weaverryan</a> </p> <h2 class="text-2xl font-semibold"> <a class="hover:text-blue-6" href="/blog/cat-gpt">Introducing Cat GPT</a> </h2> <p>Tap into the most powerful source of knowledge in the world: your cat! </div> </div> </li> <li class="mb-5"> <div class="md:flex"> <a class="min-w-fit" href="/blog/spanish-translations"><img class="mb-5 md:mb-0 inline content-center h-[206px] w-auto md:h-[158px] md:w-[253px] object-cover rounded-3xl hover:scale-105 transition duration-500 cursor-pointer" src="https://symfonycasts.com/static/media/cache/blog_image/uploads/blog/spanish-translations.png" alt="Automated Spanish Translations image"></a> <div class="md:ml-3 grow min-w-0"> <p class="js-blog-author-info pb-1 md:pb-0"> Aug 24th 2022 <span class="px-1 text-black-4">|</span> By <a href="https://github.com/MolloKhan">MolloKhan</a> and <a href="https://github.com/bocharsky-bw">bocharsky-bw</a> </p> <h2 class="text-2xl font-semibold"> <a class="hover:text-blue-6" href="/blog/spanish-translations">Automated Spanish Translations</a> </h2> <p>We're happy to announce that from now on we'll deliver Spanish translations to our new tutorials (scripts and subtitles)... pretty much instantly! </div> </div> </li> <li class="mb-5"> <div class="md:flex"> <a class="min-w-fit" href="/blog/spanish-translations-es"><img class="mb-5 md:mb-0 inline content-center h-[206px] w-auto md:h-[158px] md:w-[253px] object-cover rounded-3xl hover:scale-105 transition duration-500 cursor-pointer" src="https://symfonycasts.com/static/media/cache/blog_image/uploads/blog/spanish-translations-es.png" alt="Traducciones Autom谩ticas al Espa帽ol image"></a> <div class="md:ml-3 grow min-w-0"> <p class="js-blog-author-info pb-1 md:pb-0"> Aug 24th 2022 <span class="px-1 text-black-4">|</span> By <a href="https://github.com/MolloKhan">MolloKhan</a> and <a href="https://github.com/bocharsky-bw">bocharsky-bw</a> </p> <h2 class="text-2xl font-semibold"> <a class="hover:text-blue-6" href="/blog/spanish-translations-es">Traducciones Autom谩ticas al Espa帽ol</a> </h2> <p>Nos complace anunciar que a partir de ahora entregaremos traducciones al espa帽ol de nuestros nuevos tutoriales (guiones y subt铆tulos)... pr谩cticamente al instante! </div> </div> </li> <li class="mb-5"> <div class="md:flex"> <a class="min-w-fit" href="/blog/clean-up-migrations"><img class="mb-5 md:mb-0 inline content-center h-[206px] w-auto md:h-[158px] md:w-[253px] object-cover rounded-3xl hover:scale-105 transition duration-500 cursor-pointer" src="https://symfonycasts.com/static/media/cache/blog_image/uploads/blog/clean-up-migrations.png" alt="Clean up your migrations! image"></a> <div class="md:ml-3 grow min-w-0"> <p class="js-blog-author-info pb-1 md:pb-0"> Apr 19th 2022 <span class="px-1 text-black-4">|</span> By <a href="https://github.com/bocharsky-bw">bocharsky-bw</a> and <a href="https://github.com/AshMiass">AshMiass</a> </p> <h2 class="text-2xl font-semibold"> <a class="hover:text-blue-6" href="/blog/clean-up-migrations">Clean up your migrations!</a> </h2> <p>Does your giant migrations/ folder bother you? Let's do some spring cleaning! A tip about how to get rid of a huge set of old migration files in your project, without blowing up your database. </div> </div> </li> <li class="mb-5"> <div class="md:flex"> <a class="min-w-fit" href="/blog/symfonycasts-en-espanol"><img class="mb-5 md:mb-0 inline content-center h-[206px] w-auto md:h-[158px] md:w-[253px] object-cover rounded-3xl hover:scale-105 transition duration-500 cursor-pointer" src="https://symfonycasts.com/static/media/cache/blog_image/uploads/blog/symfonycasts-en-espanol.png" alt="SymfonyCasts en Espa帽ol image"></a> <div class="md:ml-3 grow min-w-0"> <p class="js-blog-author-info pb-1 md:pb-0"> Sep 29th 2021 <span class="px-1 text-black-4">|</span> By <a href="https://github.com/shadowc">shadowc</a>, <a href="https://github.com/weaverryan">weaverryan</a>, and <a href="https://github.com/Leannapelham">Leannapelham</a> </p> <h2 class="text-2xl font-semibold"> <a class="hover:text-blue-6" href="/blog/symfonycasts-en-espanol">SymfonyCasts en Espa帽ol</a> </h2> <p>En SymfonyCasts nos arremangamos y traducimos nuestro popular curso de Symfony 5 para que puedas disfrutarlo gratuitamente sin tener que activar el traductor universal! </div> </div> </li> <li class="mb-5"> <div class="md:flex"> <a class="min-w-fit" href="/blog/behat-panther"><img class="mb-5 md:mb-0 inline content-center h-[206px] w-auto md:h-[158px] md:w-[253px] object-cover rounded-3xl hover:scale-105 transition duration-500 cursor-pointer" src="https://symfonycasts.com/static/media/cache/blog_image/uploads/blog/behat-panther.png" alt="Wanna see some Panther image"></a> <div class="md:ml-3 grow min-w-0"> <p class="js-blog-author-info pb-1 md:pb-0"> Aug 25th 2021 <span class="px-1 text-black-4">|</span> By <a href="https://github.com/sadikoff">sadikoff</a> and <a href="https://github.com/bocharsky-bw">bocharsky-bw</a> </p> <h2 class="text-2xl font-semibold"> <a class="hover:text-blue-6" href="/blog/behat-panther">Wanna see some Panther</a> </h2> <p>You don't have to go to the Zoo to see the Panther in action. All you need is Composer and some time to configure things properly! </div> </div> </li> <li class="mb-5"> <div class="md:flex"> <a class="min-w-fit" href="/blog/behat-symfony"><img class="mb-5 md:mb-0 inline content-center h-[206px] w-auto md:h-[158px] md:w-[253px] object-cover rounded-3xl hover:scale-105 transition duration-500 cursor-pointer" src="https://symfonycasts.com/static/media/cache/blog_image/uploads/blog/behat-symfony.png" alt="Setting up Behat on Symfony 5 or higher image"></a> <div class="md:ml-3 grow min-w-0"> <p class="js-blog-author-info pb-1 md:pb-0"> Aug 3rd 2021 <span class="px-1 text-black-4">|</span> By <a href="https://github.com/sadikoff">sadikoff</a> and <a href="https://github.com/bocharsky-bw">bocharsky-bw</a> </p> <h2 class="text-2xl font-semibold"> <a class="hover:text-blue-6" href="/blog/behat-symfony">Setting up Behat on Symfony 5 or higher</a> </h2> <p>Got issues with Behat running on Symfony 5 or higher? Want to know more about its configuration and possibilities? You are in the right spot! </div> </div> </li> <li class="mb-5"> <div class="md:flex"> <a class="min-w-fit" href="/blog/symfony-world"><img class="mb-5 md:mb-0 inline content-center h-[206px] w-auto md:h-[158px] md:w-[253px] object-cover rounded-3xl hover:scale-105 transition duration-500 cursor-pointer" src="https://symfonycasts.com/static/media/cache/blog_image/uploads/blog/symfony-world.png" alt="Symfony World Videos are Available (but not here) image"></a> <div class="md:ml-3 grow min-w-0"> <p class="js-blog-author-info pb-1 md:pb-0"> Dec 7th 2020 <span class="px-1 text-black-4">|</span> By <a href="https://github.com/weaverryan">weaverryan</a> and <a href="https://github.com/MolloKhan">MolloKhan</a> </p> <h2 class="text-2xl font-semibold"> <a class="hover:text-blue-6" href="/blog/symfony-world">Symfony World Videos are Available (but not here)</a> </h2> <p>The Symfony World videos are available with high-quality captions, but not in SymfonyCasts this year! </div> </div> </li> <li class="mb-5"> <div class="md:flex"> <a class="min-w-fit" href="/blog/versions"><img class="mb-5 md:mb-0 inline content-center h-[206px] w-auto md:h-[158px] md:w-[253px] object-cover rounded-3xl hover:scale-105 transition duration-500 cursor-pointer" src="https://symfonycasts.com/static/media/cache/blog_image/uploads/blog/versions.png" alt="Now Exposed: composer.json & package.json for every Tutorial image"></a> <div class="md:ml-3 grow min-w-0"> <p class="js-blog-author-info pb-1 md:pb-0"> Aug 25th 2020 <span class="px-1 text-black-4">|</span> By <a href="https://github.com/weaverryan">weaverryan</a> </p> <h2 class="text-2xl font-semibold"> <a class="hover:text-blue-6" href="/blog/versions">Now Exposed: composer.json & package.json for every Tutorial</a> </h2> <p>Curious what versions of a library a tutorial is using? Every tutorial <em>now</em> exposes the full composer.json and package.json info! </div> </div> </li> <li class="mb-5"> <div class="md:flex"> <a class="min-w-fit" href="/blog/listen"><img class="mb-5 md:mb-0 inline content-center h-[206px] w-auto md:h-[158px] md:w-[253px] object-cover rounded-3xl hover:scale-105 transition duration-500 cursor-pointer" src="https://symfonycasts.com/static/media/cache/blog_image/uploads/blog/listen.png" alt="SymfonyCasts is here to listen image"></a> <div class="md:ml-3 grow min-w-0"> <p class="js-blog-author-info pb-1 md:pb-0"> Jun 10th 2020 <span class="px-1 text-black-4">|</span> By <a href="https://github.com/weaverryan">weaverryan</a> and <a href="https://github.com/bocharsky-bw">bocharsky-bw</a> </p> <h2 class="text-2xl font-semibold"> <a class="hover:text-blue-6" href="/blog/listen">SymfonyCasts is here to listen</a> </h2> <p>We are motivated by the message and momentum of the Black Lives Matter movement that is happening worldwide and in the US. </div> </div> </li> <li class="mb-5"> <div class="md:flex"> <a class="min-w-fit" href="/blog/symfonycats"><img class="mb-5 md:mb-0 inline content-center h-[206px] w-auto md:h-[158px] md:w-[253px] object-cover rounded-3xl hover:scale-105 transition duration-500 cursor-pointer" src="https://symfonycasts.com/static/media/cache/blog_image/uploads/blog/symfonycats.png" alt="SymfonyCasts Rebrands as SymfonyCATS image"></a> <div class="md:ml-3 grow min-w-0"> <p class="js-blog-author-info pb-1 md:pb-0"> Apr 1st 2019 <span class="px-1 text-black-4">|</span> By <a href="https://github.com/weaverryan">weaverryan</a> </p> <h2 class="text-2xl font-semibold"> <a class="hover:text-blue-6" href="/blog/symfonycats">SymfonyCasts Rebrands as SymfonyCATS</a> </h2> <p>After mis-typing SymfonyCasts as SymfonyCATS... about a million times, we decided it was easier just to go with it. </div> </div> </li> <li class="mb-5"> <div class="md:flex"> <a class="min-w-fit" href="/blog/symfonycon2018-videos"><img class="mb-5 md:mb-0 inline content-center h-[206px] w-auto md:h-[158px] md:w-[253px] object-cover rounded-3xl hover:scale-105 transition duration-500 cursor-pointer" src="https://symfonycasts.com/static/media/cache/blog_image/uploads/blog/symfonycon2018-videos.png" alt="SymfonyCon 2018 Lisbon Videos are Here image"></a> <div class="md:ml-3 grow min-w-0"> <p class="js-blog-author-info pb-1 md:pb-0"> Jan 23rd 2019 <span class="px-1 text-black-4">|</span> By <a href="https://github.com/weaverryan">weaverryan</a> </p> <h2 class="text-2xl font-semibold"> <a class="hover:text-blue-6" href="/blog/symfonycon2018-videos">SymfonyCon 2018 Lisbon Videos are Here</a> </h2> <p>Did you attend SymfonyCon and want to re-watch stuff? Or maybe you missed it and need to catch up? Either way, SymfonyCon 2018 videos are here! </div> </div> </li> <li class="mb-5"> <div class="md:flex"> <a class="min-w-fit" href="/blog/symfonycasts"><img class="mb-5 md:mb-0 inline content-center h-[206px] w-auto md:h-[158px] md:w-[253px] object-cover rounded-3xl hover:scale-105 transition duration-500 cursor-pointer" src="https://symfonycasts.com/static/media/cache/blog_image/uploads/blog/symfonycasts.png" alt="KnpUniversity is now SymfonyCasts! image"></a> <div class="md:ml-3 grow min-w-0"> <p class="js-blog-author-info pb-1 md:pb-0"> Sep 17th 2018 <span class="px-1 text-black-4">|</span> By <a href="https://github.com/weaverryan">weaverryan</a> </p> <h2 class="text-2xl font-semibold"> <a class="hover:text-blue-6" href="/blog/symfonycasts">KnpUniversity is now SymfonyCasts!</a> </h2> <p>We've got some big news! KnpUniversity is now SymfonyCasts! Find out what this means, and why we're excited! </div> </div> </li> <li class="mb-5"> <div class="md:flex"> <a class="min-w-fit" href="/blog/bookmarking"><img class="mb-5 md:mb-0 inline content-center h-[206px] w-auto md:h-[158px] md:w-[253px] object-cover rounded-3xl hover:scale-105 transition duration-500 cursor-pointer" src="https://symfonycasts.com/static/media/cache/blog_image/uploads/blog/bookmarking.png" alt="Bookmark your favorite courses and videos image"></a> <div class="md:ml-3 grow min-w-0"> <p class="js-blog-author-info pb-1 md:pb-0"> Aug 14th 2018 <span class="px-1 text-black-4">|</span> By <a href="https://github.com/bocharsky-bw">bocharsky-bw</a> and <a href="https://github.com/weaverryan">weaverryan</a> </p> <h2 class="text-2xl font-semibold"> <a class="hover:text-blue-6" href="/blog/bookmarking">Bookmark your favorite courses and videos</a> </h2> <p>We've been getting many requests lately from our users about a bookmarking feature, and now it's ready! </div> </div> </li> <li class="mb-5"> <div class="md:flex"> <a class="min-w-fit" href="/blog/subtitles"><img class="mb-5 md:mb-0 inline content-center h-[206px] w-auto md:h-[158px] md:w-[253px] object-cover rounded-3xl hover:scale-105 transition duration-500 cursor-pointer" src="https://symfonycasts.com/static/media/cache/blog_image/uploads/blog/subtitles.png" alt="Adding English Subtitles & Course Thumbnails image"></a> <div class="md:ml-3 grow min-w-0"> <p class="js-blog-author-info pb-1 md:pb-0"> Jan 30th 2018 <span class="px-1 text-black-4">|</span> By <a href="https://github.com/weaverryan">weaverryan</a> </p> <h2 class="text-2xl font-semibold"> <a class="hover:text-blue-6" href="/blog/subtitles">Adding English Subtitles & Course Thumbnails</a> </h2> <p>Making our content friendly & accessible is <em>super</em> important. That's why we've just added English subtitles & course thumbnails! </div> </div> </li> <li class="mb-5"> <div class="md:flex"> <a class="min-w-fit" href="/blog/january-2018-tut-updates"><img class="mb-5 md:mb-0 inline content-center h-[206px] w-auto md:h-[158px] md:w-[253px] object-cover rounded-3xl hover:scale-105 transition duration-500 cursor-pointer" src="https://symfonycasts.com/static/media/cache/blog_image/uploads/blog/january-2018-tut-updates.png" alt="New for January 2018 image"></a> <div class="md:ml-3 grow min-w-0"> <p class="js-blog-author-info pb-1 md:pb-0"> Jan 11th 2018 <span class="px-1 text-black-4">|</span> By <a href="https://github.com/Leannapelham">Leannapelham</a> </p> <h2 class="text-2xl font-semibold"> <a class="hover:text-blue-6" href="/blog/january-2018-tut-updates">New for January 2018</a> </h2> <p>2018 = Symfony 4 Development </div> </div> </li> <li class="mb-5"> <div class="md:flex"> <a class="min-w-fit" href="/blog/2017-year-in-review"><img class="mb-5 md:mb-0 inline content-center h-[206px] w-auto md:h-[158px] md:w-[253px] object-cover rounded-3xl hover:scale-105 transition duration-500 cursor-pointer" src="https://symfonycasts.com/static/media/cache/blog_image/uploads/blog/2017-year-in-review.png" alt="2017 Year in Review image"></a> <div class="md:ml-3 grow min-w-0"> <p class="js-blog-author-info pb-1 md:pb-0"> Dec 28th 2017 <span class="px-1 text-black-4">|</span> By <a href="https://github.com/Leannapelham">Leannapelham</a> </p> <h2 class="text-2xl font-semibold"> <a class="hover:text-blue-6" href="/blog/2017-year-in-review">2017 Year in Review</a> </h2> <p>2017 was the <em>biggest</em> year yet for KnpUniversity! </div> </div> </li> <li class="mb-5"> <div class="md:flex"> <a class="min-w-fit" href="/blog/november-2017-tut-updates"><img class="mb-5 md:mb-0 inline content-center h-[206px] w-auto md:h-[158px] md:w-[253px] object-cover rounded-3xl hover:scale-105 transition duration-500 cursor-pointer" src="https://symfonycasts.com/static/media/cache/blog_image/uploads/blog/november-2017-tut-updates.png" alt="New for November 2017 image"></a> <div class="md:ml-3 grow min-w-0"> <p class="js-blog-author-info pb-1 md:pb-0"> Nov 7th 2017 <span class="px-1 text-black-4">|</span> By <a href="https://github.com/Leannapelham">Leannapelham</a> </p> <h2 class="text-2xl font-semibold"> <a class="hover:text-blue-6" href="/blog/november-2017-tut-updates">New for November 2017</a> </h2> <p>New Release: PHPUnit with a Bite & we hope to see you in Cluj! </div> </div> </li> <li class="mb-5"> <div class="md:flex"> <a class="min-w-fit" href="/blog/october-2017-tut-updates"><img class="mb-5 md:mb-0 inline content-center h-[206px] w-auto md:h-[158px] md:w-[253px] object-cover rounded-3xl hover:scale-105 transition duration-500 cursor-pointer" src="https://symfonycasts.com/media/cache/resolve/blog_image/uploads/blog/" alt="New for October 2017 image"></a> <div class="md:ml-3 grow min-w-0"> <p class="js-blog-author-info pb-1 md:pb-0"> Oct 3rd 2017 <span class="px-1 text-black-4">|</span> By <a href="https://github.com/Leannapelham">Leannapelham</a> and <a href="https://github.com/bocharsky-bw">bocharsky-bw</a> </p> <h2 class="text-2xl font-semibold"> <a class="hover:text-blue-6" href="/blog/october-2017-tut-updates">New for October 2017</a> </h2> <p>New releases, upcoming tutorials, and upcoming Symfony events we want you to know about in October! </div> </div> </li> <li class="mb-5"> <div class="md:flex"> <a class="min-w-fit" href="/blog/symfony-3.3-changes"><img class="mb-5 md:mb-0 inline content-center h-[206px] w-auto md:h-[158px] md:w-[253px] object-cover rounded-3xl hover:scale-105 transition duration-500 cursor-pointer" src="https://symfonycasts.com/static/media/cache/blog_image/uploads/blog/symfony-3.3-changes.png" alt="Changes to Symfony Tutorials for Symfony 3.3 image"></a> <div class="md:ml-3 grow min-w-0"> <p class="js-blog-author-info pb-1 md:pb-0"> Aug 1st 2017 <span class="px-1 text-black-4">|</span> By <a href="https://github.com/weaverryan">weaverryan</a> </p> <h2 class="text-2xl font-semibold"> <a class="hover:text-blue-6" href="/blog/symfony-3.3-changes">Changes to Symfony Tutorials for Symfony 3.3</a> </h2> <p>Symfony 3.3 comes with some great new config in services.yml. But, if you're coding along with our tutorials, this code may cause some issues! Find out how to keep coding along happily. </div> </div> </li> <li class="mb-5"> <div class="md:flex"> <a class="min-w-fit" href="/blog/KnpUOAuth2ClientBundle"><img class="mb-5 md:mb-0 inline content-center h-[206px] w-auto md:h-[158px] md:w-[253px] object-cover rounded-3xl hover:scale-105 transition duration-500 cursor-pointer" src="https://symfonycasts.com/static/media/cache/blog_image/uploads/blog/KnpUOAuth2ClientBundle.png" alt="Introducing KnpUOAuth2ClientBundle: Making Social Easy image"></a> <div class="md:ml-3 grow min-w-0"> <p class="js-blog-author-info pb-1 md:pb-0"> Feb 23rd 2016 <span class="px-1 text-black-4">|</span> By <a href="https://github.com/weaverryan">weaverryan</a> </p> <h2 class="text-2xl font-semibold"> <a class="hover:text-blue-6" href="/blog/KnpUOAuth2ClientBundle">Introducing KnpUOAuth2ClientBundle: Making Social Easy</a> </h2> <p>Say hello to KnpUOAuth2ClientBundle: Social connect, social authentication, social registration - do it all, easily and without frustration. </div> </div> </li> <li class="mb-5"> <div class="md:flex"> <a class="min-w-fit" href="/blog/love-drupal-peeps"><img class="mb-5 md:mb-0 inline content-center h-[206px] w-auto md:h-[158px] md:w-[253px] object-cover rounded-3xl hover:scale-105 transition duration-500 cursor-pointer" src="https://symfonycasts.com/static/media/cache/blog_image/uploads/blog/love-drupal-peeps.png" alt="Why I Love Drupal People image"></a> <div class="md:ml-3 grow min-w-0"> <p class="js-blog-author-info pb-1 md:pb-0"> Nov 19th 2015 <span class="px-1 text-black-4">|</span> By <a href="https://github.com/weaverryan">weaverryan</a> </p> <h2 class="text-2xl font-semibold"> <a class="hover:text-blue-6" href="/blog/love-drupal-peeps">Why I Love Drupal People</a> </h2> <p>Yea yea yea, Drupal 8 is out. But more than that, Drupal people are <em>awesome</em>. So let me tell you about how I met them... </div> </div> </li> <li class="mb-5"> <div class="md:flex"> <a class="min-w-fit" href="/blog/hello-drupal-8"><img class="mb-5 md:mb-0 inline content-center h-[206px] w-auto md:h-[158px] md:w-[253px] object-cover rounded-3xl hover:scale-105 transition duration-500 cursor-pointer" src="https://symfonycasts.com/static/media/cache/blog_image/uploads/blog/hello-drupal-8.png" alt="7 Free Screencasts for the Drupal 8 Party image"></a> <div class="md:ml-3 grow min-w-0"> <p class="js-blog-author-info pb-1 md:pb-0"> Nov 17th 2015 <span class="px-1 text-black-4">|</span> By <a href="https://github.com/weaverryan">weaverryan</a> </p> <h2 class="text-2xl font-semibold"> <a class="hover:text-blue-6" href="/blog/hello-drupal-8">7 Free Screencasts for the Drupal 8 Party</a> </h2> <p>Drupal 8 is here! Now get to work with video tutorials and coding challenges for Drupal, OO coding and more. All free until Dec 25th. </div> </div> </li> <li class="mb-5"> <div class="md:flex"> <a class="min-w-fit" href="/blog/circle-ci-behat-screenshots"><img class="mb-5 md:mb-0 inline content-center h-[206px] w-auto md:h-[158px] md:w-[253px] object-cover rounded-3xl hover:scale-105 transition duration-500 cursor-pointer" src="https://symfonycasts.com/static/media/cache/blog_image/uploads/blog/circle-ci-behat-screenshots.png" alt="Behat on CircleCI with Failure Screenshots image"></a> <div class="md:ml-3 grow min-w-0"> <p class="js-blog-author-info pb-1 md:pb-0"> Oct 27th 2015 <span class="px-1 text-black-4">|</span> By <a href="https://github.com/weaverryan">weaverryan</a>, <a href="https://github.com/bocharsky-bw">bocharsky-bw</a>, and <a href="https://github.com/MolloKhan">MolloKhan</a> </p> <h2 class="text-2xl font-semibold"> <a class="hover:text-blue-6" href="/blog/circle-ci-behat-screenshots">Behat on CircleCI with Failure Screenshots</a> </h2> <p>Not only is running Behat on CircleCI easy, with just a few lines of code, you can get screenshots when a test fails. </div> </div> </li> <li class="mb-5"> <div class="md:flex"> <a class="min-w-fit" href="/blog/fun-with-symfonys-console"><img class="mb-5 md:mb-0 inline content-center h-[206px] w-auto md:h-[158px] md:w-[253px] object-cover rounded-3xl hover:scale-105 transition duration-500 cursor-pointer" src="https://symfonycasts.com/static/media/cache/blog_image/uploads/blog/fun-with-symfonys-console.png" alt="Fun with Symfony's Console Component image"></a> <div class="md:ml-3 grow min-w-0"> <p class="js-blog-author-info pb-1 md:pb-0"> Sep 29th 2015 <span class="px-1 text-black-4">|</span> By <a href="https://github.com/weaverryan">weaverryan</a> and <a href="https://github.com/MolloKhan">MolloKhan</a> </p> <h2 class="text-2xl font-semibold"> <a class="hover:text-blue-6" href="/blog/fun-with-symfonys-console">Fun with Symfony's Console Component</a> </h2> <p>Symfony's Console component can be used in a single, standalone file to add colors, build a table or add a progress bar with a beer icon. </div> </div> </li> <li class="mb-5"> <div class="md:flex"> <a class="min-w-fit" href="/blog/property_path"><img class="mb-5 md:mb-0 inline content-center h-[206px] w-auto md:h-[158px] md:w-[253px] object-cover rounded-3xl hover:scale-105 transition duration-500 cursor-pointer" src="https://symfonycasts.com/static/media/cache/blog_image/uploads/blog/property_path.png" alt="Symfony's Under-Used property_path option image"></a> <div class="md:ml-3 grow min-w-0"> <p class="js-blog-author-info pb-1 md:pb-0"> Sep 15th 2015 <span class="px-1 text-black-4">|</span> By <a href="https://github.com/weaverryan">weaverryan</a> </p> <h2 class="text-2xl font-semibold"> <a class="hover:text-blue-6" href="/blog/property_path">Symfony's Under-Used property_path option</a> </h2> <p>The Symfony Form property_path option is one of the most under-appreciated, and powerful parts of the form component. </div> </div> </li> <li class="mb-5"> <div class="md:flex"> <a class="min-w-fit" href="/blog/phpstorm-live-templates"><img class="mb-5 md:mb-0 inline content-center h-[206px] w-auto md:h-[158px] md:w-[253px] object-cover rounded-3xl hover:scale-105 transition duration-500 cursor-pointer" src="https://symfonycasts.com/static/media/cache/blog_image/uploads/blog/phpstorm-live-templates.png" alt="Our favorite PhpStorm Live Templates + Share yours image"></a> <div class="md:ml-3 grow min-w-0"> <p class="js-blog-author-info pb-1 md:pb-0"> Aug 20th 2015 <span class="px-1 text-black-4">|</span> By <a href="https://github.com/weaverryan">weaverryan</a> and <a href="https://github.com/bocharsky-bw">bocharsky-bw</a> </p> <h2 class="text-2xl font-semibold"> <a class="hover:text-blue-6" href="/blog/phpstorm-live-templates">Our favorite PhpStorm Live Templates + Share yours</a> </h2> <p>PhpStorm Live Templates: where you type a word, hit tab, and it expands into a full code-block, saving you time on all the code you write over and over again. We've published a few of our favorites, and are hoping you'll share yours. </div> </div> </li> <li class="mb-5"> <div class="md:flex"> <a class="min-w-fit" href="/blog/guard-authentication"><img class="mb-5 md:mb-0 inline content-center h-[206px] w-auto md:h-[158px] md:w-[253px] object-cover rounded-3xl hover:scale-105 transition duration-500 cursor-pointer" src="https://symfonycasts.com/static/media/cache/blog_image/uploads/blog/guard-authentication.png" alt="Introducing Guard: Symfony Security with a Smile image"></a> <div class="md:ml-3 grow min-w-0"> <p class="js-blog-author-info pb-1 md:pb-0"> Jul 13th 2015 <span class="px-1 text-black-4">|</span> By <a href="https://github.com/weaverryan">weaverryan</a> and <a href="https://github.com/Leannapelham">Leannapelham</a> </p> <h2 class="text-2xl font-semibold"> <a class="hover:text-blue-6" href="/blog/guard-authentication">Introducing Guard: Symfony Security with a Smile</a> </h2> <p>Introducing Guard: Authentication any way you want, customize the heck out of every part, and come out smiling. It's Symfony's security system unleashed! </div> </div> </li> <li class="mb-5"> <div class="md:flex"> <a class="min-w-fit" href="/blog/upgrading-symfony-2.7"><img class="mb-5 md:mb-0 inline content-center h-[206px] w-auto md:h-[158px] md:w-[253px] object-cover rounded-3xl hover:scale-105 transition duration-500 cursor-pointer" src="https://symfonycasts.com/static/media/cache/blog_image/uploads/blog/upgrading-symfony-2.7.png" alt="How we Upgraded to Symfony 2.7 (+ deprecation notices) image"></a> <div class="md:ml-3 grow min-w-0"> <p class="js-blog-author-info pb-1 md:pb-0"> May 31st 2015 <span class="px-1 text-black-4">|</span> By <a href="https://github.com/weaverryan">weaverryan</a> and <a href="https://github.com/Leannapelham">Leannapelham</a> </p> <h2 class="text-2xl font-semibold"> <a class="hover:text-blue-6" href="/blog/upgrading-symfony-2.7">How we Upgraded to Symfony 2.7 (+ deprecation notices)</a> </h2> <p>Symfony 2.7 has landed! Learn how we upgraded to the latest LTS and what hiccups we hit along the way. </div> </div> </li> <li class="mb-5"> <div class="md:flex"> <a class="min-w-fit" href="/blog/service-expressions"><img class="mb-5 md:mb-0 inline content-center h-[206px] w-auto md:h-[158px] md:w-[253px] object-cover rounded-3xl hover:scale-105 transition duration-500 cursor-pointer" src="https://symfonycasts.com/static/media/cache/blog_image/uploads/blog/service-expressions.png" alt="Symfony Service Expressions: Do things you thought Impossible image"></a> <div class="md:ml-3 grow min-w-0"> <p class="js-blog-author-info pb-1 md:pb-0"> May 2nd 2015 <span class="px-1 text-black-4">|</span> By <a href="https://github.com/weaverryan">weaverryan</a> and <a href="https://github.com/Leannapelham">Leannapelham</a> </p> <h2 class="text-2xl font-semibold"> <a class="hover:text-blue-6" href="/blog/service-expressions">Symfony Service Expressions: Do things you thought Impossible</a> </h2> <p>Did you know you can inject a Doctrine repository into a service without registering it as a service? How about injecting scalar values are arguments that live in the database? If not, you may have missed Symfony's Expression Language. </div> </div> </li> <li class="mb-5"> <div class="md:flex"> <a class="min-w-fit" href="/blog/gulp-assetic"><img class="mb-5 md:mb-0 inline content-center h-[206px] w-auto md:h-[158px] md:w-[253px] object-cover rounded-3xl hover:scale-105 transition duration-500 cursor-pointer" src="https://symfonycasts.com/static/media/cache/blog_image/uploads/blog/gulp-assetic.png" alt="Why I Switched from Assetic to Gulp image"></a> <div class="md:ml-3 grow min-w-0"> <p class="js-blog-author-info pb-1 md:pb-0"> Apr 14th 2015 <span class="px-1 text-black-4">|</span> By <a href="https://github.com/weaverryan">weaverryan</a> and <a href="https://github.com/Leannapelham">Leannapelham</a> </p> <h2 class="text-2xl font-semibold"> <a class="hover:text-blue-6" href="/blog/gulp-assetic">Why I Switched from Assetic to Gulp</a> </h2> <p>I switched from Assetic to Gulp to get more features and better support. In this post, I'll' tell you why there's a good chance that switching to Gulp is a good decision for you too. And, I'll give you a quick, 3-step intro to Gulp itself. </div> </div> </li> <li class="mb-5"> <div class="md:flex"> <a class="min-w-fit" href="/blog/expanding-code-blocks"><img class="mb-5 md:mb-0 inline content-center h-[206px] w-auto md:h-[158px] md:w-[253px] object-cover rounded-3xl hover:scale-105 transition duration-500 cursor-pointer" src="https://symfonycasts.com/static/media/cache/blog_image/uploads/blog/expanding-code-blocks.png" alt="Expanding Code Blocks image"></a> <div class="md:ml-3 grow min-w-0"> <p class="js-blog-author-info pb-1 md:pb-0"> Jan 15th 2015 <span class="px-1 text-black-4">|</span> By <a href="https://github.com/weaverryan">weaverryan</a> and <a href="https://github.com/Leannapelham">Leannapelham</a> </p> <h2 class="text-2xl font-semibold"> <a class="hover:text-blue-6" href="/blog/expanding-code-blocks">Expanding Code Blocks</a> </h2> <p>We're giving our code-blocks a face-lift to show the filename and folded lines you can expand to see the entire file. </div> </div> </li> <li class="mb-5"> <div class="md:flex"> <a class="min-w-fit" href="/blog/AppBundle"><img class="mb-5 md:mb-0 inline content-center h-[206px] w-auto md:h-[158px] md:w-[253px] object-cover rounded-3xl hover:scale-105 transition duration-500 cursor-pointer" src="https://symfonycasts.com/static/media/cache/blog_image/uploads/blog/AppBundle.png" alt="Bundles, No Bundles and AppBundle in 10 Steps image"></a> <div class="md:ml-3 grow min-w-0"> <p class="js-blog-author-info pb-1 md:pb-0"> Dec 10th 2014 <span class="px-1 text-black-4">|</span> By <a href="https://github.com/weaverryan">weaverryan</a>, <a href="https://github.com/Leannapelham">Leannapelham</a>, and <a href="https://github.com/MolloKhan">MolloKhan</a> </p> <h2 class="text-2xl font-semibold"> <a class="hover:text-blue-6" href="/blog/AppBundle">Bundles, No Bundles and AppBundle in 10 Steps</a> </h2> <p>The new AppBundle in Symfony is controversial, but I'm not sure it should be. In this post, I'll show you why it exists, why bundles are just directories, and how close we are to having <em>no</em> bundles at all. Sound crazy? It might just change the way you think about your app. </div> </div> </li> <li class="mb-5"> <div class="md:flex"> <a class="min-w-fit" href="/blog/all-access-subscription"><img class="mb-5 md:mb-0 inline content-center h-[206px] w-auto md:h-[158px] md:w-[253px] object-cover rounded-3xl hover:scale-105 transition duration-500 cursor-pointer" src="https://symfonycasts.com/static/media/cache/blog_image/uploads/blog/all-access-subscription.png" alt="All About the All Access Subscription Pass image"></a> <div class="md:ml-3 grow min-w-0"> <p class="js-blog-author-info pb-1 md:pb-0"> Nov 6th 2014 <span class="px-1 text-black-4">|</span> By <a href="https://github.com/weaverryan">weaverryan</a> and <a href="https://github.com/Leannapelham">Leannapelham</a> </p> <h2 class="text-2xl font-semibold"> <a class="hover:text-blue-6" href="/blog/all-access-subscription">All About the All Access Subscription Pass</a> </h2> <p>The KnpU All Access Pass ... ooohhh ahhhh. Introducing binge-watching and more frequent content. Build something amazing! </div> </div> </li> <li class="mb-5"> <div class="md:flex"> <a class="min-w-fit" href="/blog/composer-require"><img class="mb-5 md:mb-0 inline content-center h-[206px] w-auto md:h-[158px] md:w-[253px] object-cover rounded-3xl hover:scale-105 transition duration-500 cursor-pointer" src="https://symfonycasts.com/static/media/cache/blog_image/uploads/blog/composer-require.png" alt="Update your Docs for "composer require", then Celebrate with a Sandwich image"></a> <div class="md:ml-3 grow min-w-0"> <p class="js-blog-author-info pb-1 md:pb-0"> Oct 2nd 2014 <span class="px-1 text-black-4">|</span> By <a href="https://github.com/weaverryan">weaverryan</a>, <a href="https://github.com/pborreli">pborreli</a>, and <a href="https://github.com/Leannapelham">Leannapelham</a> </p> <h2 class="text-2xl font-semibold"> <a class="hover:text-blue-6" href="/blog/composer-require">Update your Docs for "composer require", then Celebrate with a Sandwich</a> </h2> <p>Composer's require command just learned how to guess the best version for you. So update your library docs to have a one-line installation! And then have a sandwich. </div> </div> </li> <li class="mb-5"> <div class="md:flex"> <a class="min-w-fit" href="/blog/drupaler-learn-symfony"><img class="mb-5 md:mb-0 inline content-center h-[206px] w-auto md:h-[158px] md:w-[253px] object-cover rounded-3xl hover:scale-105 transition duration-500 cursor-pointer" src="https://symfonycasts.com/static/media/cache/blog_image/uploads/blog/drupaler-learn-symfony.png" alt="Want to be a Drupal 8 Expert? Start with Symfony image"></a> <div class="md:ml-3 grow min-w-0"> <p class="js-blog-author-info pb-1 md:pb-0"> Mar 6th 2014 <span class="px-1 text-black-4">|</span> By <a href="https://github.com/weaverryan">weaverryan</a>, <a href="https://github.com/paschdan">paschdan</a>, and <a href="https://github.com/Leannapelham">Leannapelham</a> </p> <h2 class="text-2xl font-semibold"> <a class="hover:text-blue-6" href="/blog/drupaler-learn-symfony">Want to be a Drupal 8 Expert? Start with Symfony</a> </h2> <p>Drupal 8 changes a lot under the hood and those will make you a happier and more productive developer. But don't wait for its release to kick butt in the new world. That's right, just learn Symfony. </div> </div> </li> <li class="mb-5"> <div class="md:flex"> <a class="min-w-fit" href="/blog/collaboration"><img class="mb-5 md:mb-0 inline content-center h-[206px] w-auto md:h-[158px] md:w-[253px] object-cover rounded-3xl hover:scale-105 transition duration-500 cursor-pointer" src="https://symfonycasts.com/static/media/cache/blog_image/uploads/blog/collaboration.png" alt="The Collaboration Machine of the Docs World image"></a> <div class="md:ml-3 grow min-w-0"> <p class="js-blog-author-info pb-1 md:pb-0"> Feb 4th 2014 <span class="px-1 text-black-4">|</span> By <a href="https://github.com/weaverryan">weaverryan</a>, <a href="https://github.com/xabbuh">xabbuh</a>, <a href="https://github.com/pborreli">pborreli</a>, and <a href="https://github.com/Leannapelham">Leannapelham</a> </p> <h2 class="text-2xl font-semibold"> <a class="hover:text-blue-6" href="/blog/collaboration">The Collaboration Machine of the Docs World</a> </h2> <p>Collaboration on software is <em>huge</em>, and we all enjoy the benefits. So why don't we see more with documentation? I'll tell you where I think tutorials & collaboration are going and what prevents us from getting there. But I also want to know what keeps <em>you</em> from writing tutorials and collaborating. </div> </div> </li> <li class="mb-5"> <div class="md:flex"> <a class="min-w-fit" href="/blog/symfony-debugging-form-errors"><img class="mb-5 md:mb-0 inline content-center h-[206px] w-auto md:h-[158px] md:w-[253px] object-cover rounded-3xl hover:scale-105 transition duration-500 cursor-pointer" src="https://symfonycasts.com/static/media/cache/blog_image/uploads/blog/symfony-debugging-form-errors.png" alt="Accessing and Debugging Symfony Form Errors image"></a> <div class="md:ml-3 grow min-w-0"> <p class="js-blog-author-info pb-1 md:pb-0"> Jan 10th 2014 <span class="px-1 text-black-4">|</span> By <a href="https://github.com/weaverryan">weaverryan</a>, <a href="https://github.com/Leannapelham">Leannapelham</a>, <a href="https://github.com/bocharsky-bw">bocharsky-bw</a>, and <a href="https://github.com/ilithium">ilithium</a> </p> <h2 class="text-2xl font-semibold"> <a class="hover:text-blue-6" href="/blog/symfony-debugging-form-errors">Accessing and Debugging Symfony Form Errors</a> </h2> <p>Inspired by an old StackOverflow post, we'll investigate why it's so hard to get <em>all</em> of the errors of a form and unlock some new tricks by understanding the form hierarchy. </div> </div> </li> <li class="mb-5"> <div class="md:flex"> <a class="min-w-fit" href="/blog/requirejs-bower-grunt"><img class="mb-5 md:mb-0 inline content-center h-[206px] w-auto md:h-[158px] md:w-[253px] object-cover rounded-3xl hover:scale-105 transition duration-500 cursor-pointer" src="https://symfonycasts.com/static/media/cache/blog_image/uploads/blog/requirejs-bower-grunt.png" alt="Evolving RequireJS, Bower and Grunt image"></a> <div class="md:ml-3 grow min-w-0"> <p class="js-blog-author-info pb-1 md:pb-0"> Jan 2nd 2014 <span class="px-1 text-black-4">|</span> By <a href="https://github.com/weaverryan">weaverryan</a> and <a href="https://github.com/Leannapelham">Leannapelham</a> </p> <h2 class="text-2xl font-semibold"> <a class="hover:text-blue-6" href="/blog/requirejs-bower-grunt">Evolving RequireJS, Bower and Grunt</a> </h2> <p>At SymfonyCon Warsaw, I talked about RequireJS, Bower and Grunt in your PHP project. In this post, we'll go a bit further and check out a way to organize things that may be even better! </div> </div> </li> <li class="mb-5"> <div class="md:flex"> <a class="min-w-fit" href="/blog/rss"><img class="mb-5 md:mb-0 inline content-center h-[206px] w-auto md:h-[158px] md:w-[253px] object-cover rounded-3xl hover:scale-105 transition duration-500 cursor-pointer" src="https://symfonycasts.com/static/media/cache/blog_image/uploads/blog/rss.png" alt="We can has RSS? image"></a> <div class="md:ml-3 grow min-w-0"> <p class="js-blog-author-info pb-1 md:pb-0"> Sep 27th 2013 <span class="px-1 text-black-4">|</span> By <a href="https://github.com/kbond">kbond</a>, <a href="https://github.com/weaverryan">weaverryan</a>, and <a href="https://github.com/Leannapelham">Leannapelham</a> </p> <h2 class="text-2xl font-semibold"> <a class="hover:text-blue-6" href="/blog/rss">We can has RSS?</a> </h2> <p>We have an RSS feed! Ok, that's not earth-shattering, but we will be sharing tech experiences, updates, and other tech topics and we don't want you to miss out. We also talk about the code behind the RSS. </div> </div> </li> <li class="mb-5"> <div class="md:flex"> <a class="min-w-fit" href="/blog/rest-revisited"><img class="mb-5 md:mb-0 inline content-center h-[206px] w-auto md:h-[158px] md:w-[253px] object-cover rounded-3xl hover:scale-105 transition duration-500 cursor-pointer" src="https://symfonycasts.com/static/media/cache/blog_image/uploads/blog/rest-revisited.png" alt="REST Revisited image"></a> <div class="md:ml-3 grow min-w-0"> <p class="js-blog-author-info pb-1 md:pb-0"> Sep 17th 2013 <span class="px-1 text-black-4">|</span> By <a href="https://github.com/weaverryan">weaverryan</a> and <a href="https://github.com/Leannapelham">Leannapelham</a> </p> <h2 class="text-2xl font-semibold"> <a class="hover:text-blue-6" href="/blog/rest-revisited">REST Revisited</a> </h2> <p>After our recent "What the REST" post, a lot of people came out to help answer the most difficult questions around creating a RESTful API. In this post, I outline what we learned and what questions remain before we release our REST tutorial. </div> </div> </li> <li class="mb-5"> <div class="md:flex"> <a class="min-w-fit" href="/blog/licenses"><img class="mb-5 md:mb-0 inline content-center h-[206px] w-auto md:h-[158px] md:w-[253px] object-cover rounded-3xl hover:scale-105 transition duration-500 cursor-pointer" src="https://symfonycasts.com/static/media/cache/blog_image/uploads/blog/licenses.png" alt="Finding our OS Content License image"></a> <div class="md:ml-3 grow min-w-0"> <p class="js-blog-author-info pb-1 md:pb-0"> Sep 13th 2013 <span class="px-1 text-black-4">|</span> By <a href="https://github.com/weaverryan">weaverryan</a> and <a href="https://github.com/Leannapelham">Leannapelham</a> </p> <h2 class="text-2xl font-semibold"> <a class="hover:text-blue-6" href="/blog/licenses">Finding our OS Content License</a> </h2> <p>We're releasing the content of our screencasts and we want to get the license right. In this post, we give a little background and ask for your thoughts. </div> </div> </li> <li class="mb-5"> <div class="md:flex"> <a class="min-w-fit" href="/blog/what-the-rest"><img class="mb-5 md:mb-0 inline content-center h-[206px] w-auto md:h-[158px] md:w-[253px] object-cover rounded-3xl hover:scale-105 transition duration-500 cursor-pointer" src="https://symfonycasts.com/static/media/cache/blog_image/uploads/blog/what-the-rest.png" alt="What the Rest? image"></a> <div class="md:ml-3 grow min-w-0"> <p class="js-blog-author-info pb-1 md:pb-0"> Sep 4th 2013 <span class="px-1 text-black-4">|</span> By <a href="https://github.com/weaverryan">weaverryan</a>, <a href="https://github.com/kbond">kbond</a>, <a href="https://github.com/Leannapelham">Leannapelham</a>, and <a href="https://github.com/MolloKhan">MolloKhan</a> </p> <h2 class="text-2xl font-semibold"> <a class="hover:text-blue-6" href="/blog/what-the-rest">What the Rest?</a> </h2> <p>REST is as deep as the rabbit hole, with varied approaches and undefined best-practices. Should I use custom hypermedia types or something like HAL or JSON-LD? Should I implement OPTIONS? What role should the API documentation play and what information should be described inside the API itself? In this post, I'm asking for help. </div> </div> </li> <li class="mb-5"> <div class="md:flex"> <a class="min-w-fit" href="/blog/knp-you"><img class="mb-5 md:mb-0 inline content-center h-[206px] w-auto md:h-[158px] md:w-[253px] object-cover rounded-3xl hover:scale-105 transition duration-500 cursor-pointer" src="https://symfonycasts.com/static/media/cache/blog_image/uploads/blog/knp-you.png" alt="KnpYou! image"></a> <div class="md:ml-3 grow min-w-0"> <p class="js-blog-author-info pb-1 md:pb-0"> Aug 29th 2013 <span class="px-1 text-black-4">|</span> By <a href="https://github.com/Leannapelham">Leannapelham</a>, <a href="https://github.com/weaverryan">weaverryan</a>, and <a href="https://github.com/MolloKhan">MolloKhan</a> </p> <h2 class="text-2xl font-semibold"> <a class="hover:text-blue-6" href="/blog/knp-you">KnpYou!</a> </h2> <p>Sometimes, learning something technical is just plain hard. Information is scattered, opinions vary, and best-practices are buried. Nothing tells the whole, realistic story in a real world application. We work together on open source libraries, but not on tutorials. So now, we're excited to enter our next phase, where it's all about collaboration and working together! </div> </div> </li> </ul> <!-- ESI TIME: 2025-04-02 16:05:18 --> </div> </main> <footer class="my-10 max-w-7xl mx-auto border-t border-black-2 dark:border-black-6 px-5"> <section class="flex flex-col md:flex-row md:justify-between mb-16 pt-11"> <div> <div class="bg-[url('../images/symfonycasts-logo-dm.svg')] w-[65px] h-[55px] bg-cover bg-no-repeat" alt="SymfonyCasts Logo"></div> <div class="text-[32px] font-semibold mt-4 mb-8 dark:text-white">Where learning is really fun.</div> <div class="text-xs min-[500px]:text-base flex"> <div><a href="/contact" class="btn-secondary-lg whitespace-nowrap">Get in touch<i class="fa-solid fa-envelope pl-2.5"></i></a></div> <div><a href="/pricing" class="btn-blue-lg ml-3 whitespace-nowrap">All Access Pass<i class="fa-solid fa-bolt-lightning pl-2.5"></i></a></div> </div> </div> <div class="flex flex-row mt-6 md:mt-0"> <div class="mr-16"> <ul class="text-[22px] font-semibold dark:text-white"> <li class="pb-3"><a href="/courses#all" class="hover:text-blue-6">Courses</a></li> <li class="pb-3"><a href="/courses#tracks" class="hover:text-blue-6">Tracks</a></li> <li class="pb-3"><a href="/pricing" class="hover:text-blue-6">Pricing</a></li> <li class="pb-3"><a href="/gift-card/" class="hover:text-blue-6">Gift Card</a></li> <li class="pb-3"><a href="/blog" class="hover:text-blue-6">Blog</a></li> </ul> </div> <div> <ul class="text-sm pt-2.5 dark:text-black-4"> <li class="pb-3"><a href="/faq" class="hover:text-blue-6">FAQ</a></li> <li class="pb-3"><a href="/about" class="hover:text-blue-6">About</a></li> <li class="pb-3"><a href="/terms" class="hover:text-blue-6">Terms</a> <span>&</span> <a href="/privacy" class="hover:text-blue-6">Privacy</a></li> <li class="pb-3"><a href="/courses?status=upcoming&sort=popular#all" class="hover:text-blue-6">Roadmap</a></li> <li class="pb-3"><a href="/contact" class="hover:text-blue-6">Contact</a></li> </ul> </div> </div> </section> <section class="flex flex-col md:flex-row md:justify-between"> <div class="dark:text-white"> <a href="https://github.com/SymfonyCasts" class="hover:text-blue-6"><i class="fa-brands fa-github pr-8"></i></a> <a href="https://twitter.com/SymfonyCasts" class="hover:text-blue-6"><i class="fa-brands fa-x-twitter pr-8"></i></a> <a href="https://www.facebook.com/SymfonyCasts/" class="hover:text-blue-6"><i class="fa-brands fa-facebook-f pr-8"></i></a> <a href="https://www.linkedin.com/company/symfonycasts/" class="hover:text-blue-6"><i class="fa-brands fa-linkedin pr-8"></i></a> <span>Powered by <span class="text-blue-6">KnpUniversity</span></span> </div> <div> <p class="dark:text-black-4 mt-6 md:mt-0">Hosted with <i class="fa-solid fa-heart text-red-600"></i> on <a href="https://symfony.com/cloud/" class="underline hover:text-blue-6">platform.sh</a></p> </div> </section> </footer> </body> </html>