Lean DTOs &amp; Value Objects in Laravel (PHP 8.3) | Mohamed Said       [Skip to content](#main)  [ ![](https://cdn.msaied.com/01KT78WE565VEMM3PSNQAAB0MH.png) Mohamed SaidLaravel Backend Engineer ](https://www.msaied.com/public) - [Home](https://www.msaied.com/public)
- [Projects](https://www.msaied.com/public/projects)
- [Articles](https://www.msaied.com/public/articles)
- [Certificates](https://www.msaied.com/public/certificates)
- [About](https://www.msaied.com/public#about)

           [  Contact](https://www.msaied.com/public#contact) Menu 

Menu
----

Close 

 - [HomeStart here](https://www.msaied.com/public)
- [ProjectsCase studies](https://www.msaied.com/public/projects)
- [ArticlesEngineering notes](https://www.msaied.com/public/articles)
- [CertificatesCredentials](https://www.msaied.com/public/certificates)
- [AboutHow I work](https://www.msaied.com/public#about)
- [ContactGet in touch](https://www.msaied.com/public#contact)

  [Start a conversation](https://www.msaied.com/public#contact) [WhatsApp](https://wa.me/201094619204) [Email](mailto:hello@msaied.com) 

 1. [Home](https://www.msaied.com/public)
2. /
3. [Articles](https://www.msaied.com/public/articles)
4. /
5. Contextual DTOs and Value Objects in Laravel Without the Bloat

 Contextual DTOs and Value Objects in Laravel Without the Bloat
===============================================================

 Learn how to design lean DTOs and value objects in Laravel using PHP 8.3 readonly classes, custom Eloquent casts, and factory helpers — without pulling in a heavy DDD framework.

 ![](https://cdn.msaied.com/01M22N44A70A5MC2S599JP0MPH.webp) [Mohamed Said](https://www.msaied.com/public#person) Published 14 Aug 2026 · Updated 14 Aug 2026 · 1 min read

ShareCopy linkCopied

 ![Contextual DTOs and Value Objects in Laravel Without the Bloat](https://cdn.msaied.com/549/9eafcdbde2cf4401308fb8644ae9a3ab.png) 

  On this page +1. [The Problem With Bloated DDD Toolkits](#the-problem-with-bloated-ddd-toolkits)
2. [DTOs: Readonly Classes as Input Contracts](#dtos-readonly-classes-as-input-contracts)
3. [Value Objects: Encapsulate Rules, Not Just Data](#value-objects-encapsulate-rules-not-just-data)
4. [Casting Value Objects Into Eloquent](#casting-value-objects-into-eloquent)
5. [Keeping Actions Thin](#keeping-actions-thin)
6. [Key Takeaways](#key-takeaways)

 The Problem With Bloated DDD Toolkits
-------------------------------------

Most DDD tutorials for Laravel end with you installing a 40-class package that wraps every primitive in an abstract hierarchy. The result is more ceremony than clarity. PHP 8.3 readonly classes, combined with a few focused conventions, give you everything you actually need.

---

DTOs: Readonly Classes as Input Contracts
-----------------------------------------

A DTO's only job is to carry validated, typed data across a boundary — from a controller into an action, or from a queue payload into a handler. PHP 8.3 readonly classes are a perfect fit.

```php
