The Same App, Built in Six PHP Frameworks

We wanted a single, honest answer to a question prospective clients ask us all the time: “Do you actually know PHP, or just one framework?” So instead of a capabilities slide, we built the same small application six times — once in Laravel, Symfony, CodeIgniter, CakePHP, Slim, and as a WordPress plugin — and deployed every one of them. This post is the tour. Each framework name links to a running demo you can use right now, with full source on GitHub.

The app is deliberately boring, because boring is where frameworks reveal themselves. It’s called Quip: a public message board. Post a short message (3–280 characters, optional name), see it validated, watch it land on a paginated list, click through to a permalink. That’s it. No novelty to hide behind — just routing, persistence, validation, templating, flash messages, and pagination, which is to say the exact bones of almost every CRUD feature anyone has ever paid us to build.

The six, and where each one shines

Laravel is the one most teams reach for today, and for good reason. Eloquent models, Blade templates, the validator, named routes, and a first-class testing story make the happy path very short. Our Laravel Quip is the reference implementation, and its test suite is property-based (more on that below) — we assert that any well-formed body round-trips verbatim, not just the three inputs we happened to think of.

Symfony is what we reach for when the architecture has to scale with the org. PHP-8 route attributes, a real dependency-injection container, Doctrine entities with assertion constraints, and Twig give you structure that holds up when ten engineers are in the codebase. It’s more ceremony than Laravel for a board this size — and exactly that ceremony is what you want on a system that will live for a decade.

CodeIgniter is the framework people apologize for running and shouldn’t. It’s small, it’s fast, it has almost no magic, and a huge amount of working software quietly runs on it. A junior can read the whole request lifecycle in an afternoon. When a client has a CodeIgniter app that “nobody wants to touch,” this demo is our way of saying: we’ll touch it, and we’ll enjoy it.

CakePHP is convention-over-configuration from before that phrase was cool. Its Table/Entity ORM, baked validation, and helper-driven templates make a tidy app fall out almost for free if you follow the conventions — and make legacy maintenance pleasant if the original team did too.

Slim is the outlier: a micro-framework, PSR-7 requests and PSR-15 middleware, a DI container, and otherwise you decide. Our Slim Quip talks to SQLite through plain, prepared PDO. It’s the right tool when you want a lean API or service without signing up for a full framework’s opinions.

WordPress isn’t a framework in the same sense, but pretending it doesn’t matter is how agencies lose the largest, most lucrative slice of the PHP market. Our Quip board here is a real plugin — a shortcode, a custom table created on activation, nonce-protected submissions, and the WordPress sanitization APIs — the kind of custom engineering that separates a plugin developer from a theme installer.

What stayed the same — and what didn’t

The shape of the work was identical every time: a route to a controller (or its equivalent), a validated write, a redirect-with-flash, a paginated read, a permalink. What changed was the spelling. Laravel’s $request->validate([...]) becomes Symfony’s #[Assert] constraints on an entity, becomes CodeIgniter’s model validation rules, becomes CakePHP’s validationDefault(), becomes a hand-rolled check in Slim, becomes sanitize_text_field() plus a length guard in WordPress. None of these is “right.” The skill a client is actually buying is knowing which spelling their codebase already uses and writing the next feature so it looks like the rest of the app, not like a tourist passed through.

A small, real example: every demo persists to SQLite and ships as a single FrankenPHP container, deployed with Kamal behind a shared proxy that issues TLS automatically. Six PHP apps, six subdomains, one tiny server, near-zero per-app overhead. That deployment story is the same regardless of framework — which is itself the point. The framework is a detail; shipping it reliably is the job.

The honest take

If you’re starting greenfield in 2026 and have no constraints, Laravel or Symfony are the defaults, and which one comes down to team taste and how much structure you want imposed for you. But most work isn’t greenfield. Most work is a CodeIgniter app from 2016 that prints money, a CakePHP back office three versions behind, a WordPress install with a plugin nobody documented. The frameworks people quietly disparage are the ones running the businesses that can afford to hire help. Being good across all of them — and unsnobbish about it — is the whole offer.

That’s what these six demos are: proof, not promises. Use them, read the source, and if any of it looks like the codebase keeping you up at night, tell us what you’re running into.