bradietilley / php-data
A lightweight, framework-agnostic Data Transfer Object library for PHP with first-class Laravel integration.
v0.0.1
2026-07-23 09:43 UTC
Requires
- php: ^8.3
Requires (Dev)
- laravel/framework: ^13.0
- laravel/pint: ^1.18
- orchestra/testbench: ^11.0
- pestphp/pest: ^4.0
- phpstan/phpstan: ^2.0
Suggests
- laravel/framework: Enables model/collection/paginator hydration and config() integration.
- nesbot/carbon: Enables automatic Carbon date casting in from()/toArray().
README
A lightweight, framework-agnostic Data Transfer Object (DTO) library for PHP, with first-class Laravel integration.
Documentation
Full documentation is available at bradietilley.dev/php-data.
Installation
composer require bradietilley/php-data
use BradieTilley\Data\Data; class ProductData extends Data { public function __construct( public string $title, public int $reviews, public float $rating, public CategoryData $category, ) {} } class CategoryData extends Data { public function __construct( public string $title, public bool $featured, ) {} } // Hydrate from an array, model, DTO, stdClass or JSON string, with automatic casting $product = ProductData::from([ 'title' => 'Denim Jeans', 'reviews' => '5', 'rating' => '4.5', 'category' => [ 'name' => 'Pants', 'featured' => false, ], ]); // …or construct explicitly with named arguments $product = ProductData::make( title: 'Widget', reviews: '5', rating: '4.5', category: [ 'name' => 'Pants', 'featured' => false, ], ); $product->category; // CategoryData<[ 'title' => 'Pants', 'featured' => false ]> // Serialize $product->toArray(); // ['title' => 'Widget', 'reviews' => 5, 'rating' => 4.5, 'category' => ['title' => 'Pants', 'featured' => false]]
See the documentation for hydration, serialization, attributes, and framework-agnostic usage.