Kevin Bond
banner
zenstruck.com
Kevin Bond
@zenstruck.com
Open Source, #PHP, #Symfony Developer. Writer @SymfonyCasts.com, @Symfony.com Core Member. Author of https://github.com/zenstruck packages.
Reposted by Kevin Bond
Symfony Bundle Development #35:
Publish or perish... Let’s add our bundle to Packagist and tag a 1.0 release! 🚀
Publish to Packagist and Release
Our bundle is now hosted on GitHub and our continuous integration with GitHub Actions is green! To make it installable via Composer, we need to publish it on Packagist. You won't be able to follow along...
symfonycasts.com
December 9, 2025 at 9:01 AM
Reposted by Kevin Bond
Symfony Bundle Development #34:
Time to go public! We’ll add a GitHub Actions workflow for tests, static analysis, and coding standards, then create a fresh GitHub repo for our bundle and watch our CI spring to life. 🤞
CI with GitHub Actions
At long last, it's time to share our bundle with the world! First though, we'll add the configuration needed for GitHub Actions to run our tests, static analysis, and verify our coding standards. In our...
symfonycasts.com
December 8, 2025 at 9:01 AM
And 2.8.1 fully supports Symfony 8!

Foundry has also passed 10M downloads!
December 6, 2025 at 9:01 PM
Reposted by Kevin Bond
Reposted by Kevin Bond
Symfony Bundle Development #33:
We’ve got tests, but it’s time to add another superpower: PHPStan! Static analysis helps reveal sneaky issues your test suite might miss - let's dig in!
Static Analysis with PHPStan
While *tests* verify your code works as expected by running it, *static analysis* examines your code without executing it. This helps catch potential issues that tests might miss
symfonycasts.com
December 5, 2025 at 3:42 PM
Reposted by Kevin Bond
Symfony Bundle Development #32:
With code and tests locked in, it's time to give our bundle a little polish 💅 — add metadata, clean up docs, tidy exports, and bring in consistent, automated code styling with PHP CS Fixer.
Metadata & PHP CS Fixer
Bundle coding is done, and tests are passing on all our supported Symfony versions. We're on the home stretch! ## License File Let's add a license file to our bundle
symfonycasts.com
December 4, 2025 at 9:01 AM
Reposted by Kevin Bond
Symfony Bundle Development #31:
Bundles don't get to be picky about their dependencies. So, let's widen those constraints and take our test suite on a tour of Symfony versions - including the wild, un-housebroken dev builds.
Testing with Multiple Symfony Versions
It's time to nail down the PHP and package dependency versions our bundle supports. ## Adding PHP Version Requirement If we look at our bundle's "composer
symfonycasts.com
December 3, 2025 at 9:01 AM
Reposted by Kevin Bond
This year's #SymfonyCon was incredible -- full of good vibes and awesome talks. Huge thanks to the @symfony.com team for the spectacular organization 🙌

Hope all attendees of my "Rediscover the Console" talk enjoyed it, here are the slides! speakerdeck.com/chalasr/redi...
Rediscover the Console - SymfonyCon Amsterdam 2025
Console is one of the most widely used Symfony components and ranks among the top 5 most downloaded PHP packages worldwide. Used by essential tools s…
speakerdeck.com
December 1, 2025 at 7:16 PM
Reposted by Kevin Bond
Let's gooo #SymfonyCon Amsterdam! Come by our booth to grab some socks 🧦 and swag!
November 27, 2025 at 6:45 AM
Reposted by Kevin Bond
We're so excited for #SymfonyCon tomorrow! 🚀
November 26, 2025 at 2:11 PM
Reposted by Kevin Bond
Our translations work 🥳 but relying on the idea that all entities will have a getId() method? Kinda risky. Let’s make it rock-solid by letting Doctrine handle ID fetching - no hoping and wishing needed!
Fetch the Object ID with Doctrine
Currently, our French translation data is being successfully displayed on the page. However, our current method of fetching the ID using "$object->getId()" is a bit shaky
symfonycasts.com
October 6, 2025 at 9:01 AM
Reposted by Kevin Bond
🚨 New course alert: Reusable Bundles 📦! Bundle development received a facelift in Symfony 6. Let’s check this out by creating a real, usable bundle that we’ll eventually push to Packagist for all to enjoy. Step 1: Initialize our bundle!
Initialize the Bundle
Hey friends! Welcome to the *Reusable Symfony Bundle* course. I'm Kevin, and I'll be your *bundle navigator* on this journey
symfonycasts.com
September 8, 2025 at 9:02 AM
Reposted by Kevin Bond
We've successfully pushed our English translations up to @Crowdin.bsky.social . Merci beaucoup! now, let's automatically translate and pull them back down!
Pushing & Pulling Translations
Our "Space Bar" project on Crowdin is all set up and configured for our app's locales. Let's push up our translations! At your terminal, run: """terminal symfony console translation:push """ Ok, all our...
symfonycasts.com
August 4, 2025 at 9:01 AM
Reposted by Kevin Bond
For a course about translations, we really haven’t done much "translating" yet. That’s kinda important! Symfony has integrations with a few different Translation Provider services. Let’s look at @Crowdin.bsky.social, and see how it works!
Translation Providers
So far, we've mostly focused on translating our site from English to... English... What about French and Spanish? We've talked a bit about how we can manually send our "messages.en
symfonycasts.com
August 1, 2025 at 9:01 AM
Reposted by Kevin Bond
The translation:extract command automates pulling missing translation keys from your PHP and Twig files. But it also has a secret, secondary purpose... Let's check it out! 🕵️
`translation:extract` Command
So far, we've been creating translation keys and manually adding them, and their values to "messages.en
symfonycasts.com
July 31, 2025 at 9:01 AM
Reposted by Kevin Bond
I'll admit it, mistakes are going to happen, translations will be missed! Let's look at the tools Symfony provides to help find these and how you can prevent missing translations from making it to production.
Debugging & Linting Translations
Did you finish your homework? Don't worry, neither did I! Let's bike shed that for now and look at debugging translations. This'll be helpful for that homework anyway! ## Web Debug Toolbar On the English...
symfonycasts.com
July 30, 2025 at 9:01 AM
Reposted by Kevin Bond
The SymfonyCLI makes local development a breeze - but works best when PHP is installed directly on your machine. Let's walk through setting up PHP (plus database extensions) and the SymfonyCLI on macOS/Linux/Windows so you're ready to start building Symfony apps. symfonycasts.com/blog/install...
Installing PHP and Symfony CLI Locally
The Symfony CLI makes local development a breeze - but it works best when PHP is installed directly on your machine. Let's walk through setting up PHP (plus common database extensions) and the…
symfonycasts.com
July 30, 2025 at 9:02 AM
Reposted by Kevin Bond
HTML in your translations, it's gonna happen. There isn't a perfect solution, so let's take a look at our options.
HTML in Translations
Here's another complex scenario. On our homepage, scroll down to the footer
symfonycasts.com
July 29, 2025 at 9:02 AM
Reposted by Kevin Bond
Let's look at a more complex translation, one with dynamic values and pluralization, because "1 dinosaurs" doesn't sound quite right 🦖
Placeholders and Pluralization
Onward! Let's find a complex translation scenario. On the article page, scroll down and find the comments section
symfonycasts.com
July 28, 2025 at 9:01 AM
Reposted by Kevin Bond
One last thing before we finally translate the site: translation "keys". Let's look at why we use these, how to use them, and how YAML helps!
Translation "Keys"
We're *almost* ready to start translating this site! But before we get started, I want to show a little teensy tiny problem with our setup so far. We still have this "Hello World!" text so jump into "templates/article/index
symfonycasts.com
July 25, 2025 at 9:01 AM
Reposted by Kevin Bond
Let's do the real work of translating! See where and how you translate text, the "anatomy" of a translation, creating, and loading them.
Translating Content
It's time to actually do some translating! There's two main places you typically translate content. First: in PHP code, like flash messages in your controllers
symfonycasts.com
July 24, 2025 at 9:01 AM
Reposted by Kevin Bond
Let's create a nifty language switcher widget since having users manually manipulate the URL in their address bar is a huge bummer.
Create a Language Switcher
We have localized routing up and running, but we can only switch locales by manually updating the URL. That won't do! Instead, let's add a language switcher! Up here, next to our search form, we need...
symfonycasts.com
July 23, 2025 at 9:01 AM
Reposted by Kevin Bond
With the Translation component installed and configured, our next step is to figure out what language a user wants. There are a couple ways to do this, but let's look at the most robust one: Localized, or Translated routing.
Localized Routes
We installed the translation component. Go us! Also, our pages are advertised via the "lang" attribute as our default locale: "en"
symfonycasts.com
July 22, 2025 at 9:02 AM
Reposted by Kevin Bond
🇬🇧 🔄 🇪🇸 🔄 🇫🇷 New course all about the Symfony Translation component! We'll take an English-only site, translate it into multiple languages, add a language switcher and let it loose on the world... First let's install the component.
Installing the Translation Component
Hey friends! e alegro de que te hayas unido a mí en este curso de sobre las traducciones de Symfony! In this tutorial, we're celebrating one of the oldest components in Symfony, but for the first time...
symfonycasts.com
July 21, 2025 at 9:02 AM
Reposted by Kevin Bond
If you already love Foundry (I do!), wait until you see how simple it is to create a *fleet* of ships and their parts
Setting Relations in Foundry
We have a couple of parts and a few starships, but to fill our testing data fleet: I want a *lot* more. This is a job perfectly suited for our good friend: Foundry
symfonycasts.com
June 20, 2025 at 9:03 AM