Catching Risky Doctrine Migrations Before Production
Database migrations are one of those things that often look harmless during code review. A migration may contain only a few lines of SQL, the applic…
Tech news from the best sources
Database migrations are one of those things that often look harmless during code review. A migration may contain only a few lines of SQL, the applic…
There is a concurrency problem in APIs that is easy to miss. Two clients read the same resource: Client A -> GET /documents/42 Client B -> GET…
I recently released a small open-source Symfony bundle called MaskedBundle . The reason for building it was quite simple: logs are useful, but somet…
A comment on my last article was better than the article. The subject was single-database multi-tenancy, and @to21as argued that the predicate shoul…
Single-database multi-tenancy is the cheapest kind: one schema, one connection, an organization_id column on every tenant-owned table. The whole des…
JSON has no representation for a file. Strings, numbers, arrays, objects - that is the whole list. So every JSON-RPC API eventually runs into the sa…
Upgrading a Symfony application to PHP 8.4 doesn't have to mean rewriting half the codebase. For applications that have been running in production f…
If you write PHP and work with Symfony every day, chances are you’ve already run PHPStan or Psalm, or at least heard of Rector. But let’s be honest:…
mailkite/symfony-mailer resolves a mailkite+api:// DSN into a first-party Symfony Mailer transport — which means Mautic, PrestaShop, Drupal, and any…
Shopify's app documentation has exactly one first-class path: Node, the official CLI, and a Remix template that wires authentication for you. Pick a…
Contract testing a Symfony API with OpenAPI takes four moving parts: the OpenAPI spec, a WebTestCase (or a plain Request / Response pair), one trait…
For years, Symfony teams solved UI scaling one of two ways. Either you adopted a JavaScript build pipeline — Webpack Encore, Vite, npm scripts — and…
Book: Decoupled PHP — Clean and Hexagonal Architecture for Applications That Outlive the Framework Also by me: Thinking in Go (2-book series) — Comp…
Book: Decoupled PHP — Clean and Hexagonal Architecture for Applications That Outlive the Framework Also by me: Thinking in Go (2-book series) — Comp…
Book: Decoupled PHP — Clean and Hexagonal Architecture for Applications That Outlive the Framework Also by me: Thinking in Go (2-book series) — Comp…
When you build an API, the first line of defense isn't your firewall or your database — it's the request itself. Every payload that hits your contro…
Why JavaScript Calendar Libraries Fail Here The go-to solution for a calendar has been a JavaScript widget: FullCalendar, Pikaday, flatpickr, or one…
Originally posted on https://symfonycasts.com/blog/honest-entities Your Doctrine entities are lying to you! For years, the standard way to build Doc…
A prototype web page displaying pure placeholder content When building early UI prototypes or shaping design systems in Symfony, placeholder content…
Security is the cornerstone of any modern web application, but historically, implementing robust authentication and authorization mechanisms has bee…
Table of Contents Introduction Double-check everything Configure your Environment Variables Install/Update your Vendors Clear your Symfony Cache Ins…
I recently published a small Symfony bundle called Request To Form Bundle . I have been using Symfony for a while now, and in several REST API proje…
When building Symfony APIs, I kept duplicating the same request contract: validation rules in a DTO OpenAPI schema (often separately) mapping / glue…
The ongoing large scale adoption of AI is rapidly changing the way many people interact with the web. Therefore websites and web-apps must adapt so…
My previous bundle that supported Symfony 5 and 6 was downloaded over 210.000 times, so it looks like it was useful. :D I've decided to publish an u…