We've successfully pushed our English translations up to @Crowdin.bsky.social . Merci beaucoup! now, let's automatically translate and pull them back down!
04.08.2025 09:01 β π 4 π 1 π¬ 0 π 0@zenstruck.com.bsky.social
Open Source, #PHP, #Symfony Developer. Writer @SymfonyCasts.com, @Symfony.com Core Member. Author of https://github.com/zenstruck packages.
We've successfully pushed our English translations up to @Crowdin.bsky.social . Merci beaucoup! now, let's automatically translate and pull them back down!
04.08.2025 09:01 β π 4 π 1 π¬ 0 π 0For 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!
01.08.2025 09:01 β π 4 π 1 π¬ 0 π 0The 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! π΅οΈ
31.07.2025 09:01 β π 1 π 1 π¬ 0 π 0I'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.
30.07.2025 09:01 β π 1 π 1 π¬ 0 π 0The 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...
30.07.2025 09:02 β π 4 π 1 π¬ 0 π 0HTML in your translations, it's gonna happen. There isn't a perfect solution, so let's take a look at our options.
29.07.2025 09:02 β π 2 π 1 π¬ 0 π 0Let's look at a more complex translation, one with dynamic values and pluralization, because "1 dinosaurs" doesn't sound quite right π¦
28.07.2025 09:01 β π 1 π 1 π¬ 0 π 0One 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!
25.07.2025 09:01 β π 1 π 1 π¬ 0 π 0Let's do the real work of translating! See where and how you translate text, the "anatomy" of a translation, creating, and loading them.
24.07.2025 09:01 β π 1 π 1 π¬ 0 π 0Let's create a nifty language switcher widget since having users manually manipulate the URL in their address bar is a huge bummer.
23.07.2025 09:01 β π 2 π 1 π¬ 0 π 0With 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.
22.07.2025 09:02 β π 2 π 1 π¬ 0 π 0π¬π§ π πͺπΈ π π«π· 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.
21.07.2025 09:02 β π 4 π 2 π¬ 0 π 0If you already love Foundry (I do!), wait until you see how simple it is to create a *fleet* of ships and their parts
20.06.2025 09:03 β π 2 π 1 π¬ 0 π 0ManyToOne: the king of all relations. The way this looks in PHP & the database is nerd wonderful!
18.06.2025 09:02 β π 5 π 1 π¬ 0 π 0To track our starship parts letβs create a StarshipPart entity & load the database via Foundry. Donβt forget the βpartβ called toilet paper!
17.06.2025 09:02 β π 3 π 1 π¬ 0 π 0Our Javascript event listener to sync LemonSqueezy customers with our app users has a little security issue. We could disable the listener in production and just rely on webhooks but that's lame! Let's fix the problem!
17.06.2025 09:30 β π 4 π 1 π¬ 0 π 0New tutorial time! Weβre catching up & finishing up (I know, way overdue π§ ) our Symfony 7 track with Symfony 7 Doctrine Relations! Weβre kicking off with alien animations AND audio from me, @weaverryan! π
16.06.2025 09:02 β π 10 π 2 π¬ 0 π 0Working with webhooks locally can be a bit of a pain, even with Ngrok. Let's look at an alternative way to sync our app users with LemonSqueezy customers: Javascript events!
16.06.2025 09:30 β π 4 π 2 π¬ 0 π 0Thanks for having me! Here are the slides: speakerdeck.com/kbond/rethin...
We'll get back to you about the shirts! π
The LemonSqueezy checkout now happens in our app, booya! But, it's pretty subtle. Let's embed it in a modal and fine-tune the "open checkout" button π
12.06.2025 09:02 β π 2 π 1 π¬ 0 π 0Letβs not risk losing sales by redirecting users to Lemon Squeezy to complete their checkout. Instead, bring the checkout to our site!
11.06.2025 09:02 β π 3 π 1 π¬ 0 π 0We're thinking of ways to improve. There's a config option to use migrations.
07.06.2025 19:36 β π 1 π 0 π¬ 1 π 0Foundry now has it's own command to load dev fixtures! (previously, we recommended using doctrine/fixtures, which is a great package, but overkill for this purpose)
06.06.2025 20:38 β π 4 π 1 π¬ 1 π 0dd()'ing API errors is getting old fast... and it won't help us in production. Let's craft a custom exception that gives us a message that's simpler and to the point π―.
06.06.2025 09:03 β π 1 π 1 π¬ 0 π 0How can we display all the orders for a user? Fun fact: we don't need an orders table. Now that weβve created a connection between our User entity and a Lemon Squeezy customer, letβs use the LS API to show previous orders on our site.
05.06.2025 09:02 β π 2 π 1 π¬ 0 π 0Foundry 2.6 is released π
We've introduced a new command `bin/console foundry:load-stories` you can use to load fixtures in your database
see docs for more info symfony.com/bundles/Zens...
@zenstruck.com
#php #symfony
Tests are always important, but even more so when dealing with e-commerce. Letβs write a full integration test for our LemonSqueezy webhook so we can sleep easy at night! π΄
29.05.2025 09:02 β π 3 π 1 π¬ 0 π 0We have Symfony successfully parsing our Lemon Squeezy webhook. Now, letβs create a RemoteEvent consumer to handle all that webhook biz logic!
28.05.2025 09:02 β π 2 π 1 π¬ 0 π 0Don't worry, Foundry 3.0 will be perfect!
25.05.2025 20:38 β π 1 π 0 π¬ 0 π 0Every time, without fail...
25.05.2025 18:31 β π 6 π 0 π¬ 1 π 0