Bag

Bag stats

Downloads
1.2K
Stars
76
Open Issues
4
Forks
7

View on GitHub →

A comprehensive immutable value objects implementation

Bag

Coverage Quality Gate Status

Bag

Immutable Value Objects for PHP 8.3+ inspired by spatie/laravel-data, created by Davey Shafik.

Introduction

Bag helps you create immutable value objects. It's a great way to encapsulate data within your application.

Bag prioritizes immutability and type safety with built-in validation and data casting.

When to use Value Objects

Value objects should be used in place of regular arrays, allowing you enforce type safety and immutability.

Features

  • Immutable & Strongly typed
  • Value casting — both input and output
  • Collection support
  • Composable — nest Bag value objects and collections
  • Built-in validation

[!NOTE] Bag is framework-agnostic, but it works great with Laravel. Bag uses standard Laravel Collections and Validation. In addition, it will automatically inject Bag\Bag value objects into your controllers with validation.

Requirements

Bag requires PHP 8.3+, and supports Laravel 11.x.

Installation

You can install the package via composer:

composer require dshafik/bag

Usage

Creating a Value Object

To create a basic Value Object, extend the Bag\Bag class and define your properties in the constructor:

use Bag\Bag;
 
readonly class MyValue extends Bag {
public function __construct(
public string $name,
public int $age,
) {
}
}

Instantiating a Value Object

To create a new instance of your Value Object, call the ::from() method:

$value = MyValue::from([
'name' => 'Davey Shafik',
'age' => 40,
]);

Documentation

Full documentation can be found here.

dshafik photo

Davey Shafik is a full-time developer with 25 years of experience as a technical polyglot with a focus on PHP and related technologies.

Cube

Laravel Newsletter

Join 40k+ other developers and never miss out on new tips, tutorials, and more.


Dshafik Bag Related Articles

Immutable Value Objects in PHP and Laravel With the Bags Package image

Immutable Value Objects in PHP and Laravel With the Bags Package

Read article
SaaSykit: Laravel SaaS Starter Kit logo

SaaSykit: Laravel SaaS Starter Kit

SaaSykit is a Multi-tenant Laravel SaaS Starter Kit that comes with all features required to run a modern SaaS. Payments, Beautiful Checkout, Admin Panel, User dashboard, Auth, Ready Components, Stats, Blog, Docs and more.

SaaSykit: Laravel SaaS Starter Kit
No Compromises logo

No Compromises

Joel and Aaron, the two seasoned devs from the No Compromises podcast, are now available to hire for your Laravel project. ⬧ Flat rate of $9500/mo. ⬧ No lengthy sales process. ⬧ No contracts. ⬧ 100% money back guarantee.

No Compromises
Curotec logo

Curotec

World class Laravel experts with GenAI dev skills. LATAM-based, embedded engineers that ship fast, communicate clearly, and elevate your product. No bloat, no BS.

Curotec
Celebian logo

Celebian

Celebian is a social media marketing agency specializing in helping their clients go viral on TikTok. Whether you're looking to reach a bigger audience or gain more Tiktok followers, likes, and views, they've got you covered.

Celebian
Kirschbaum logo

Kirschbaum

Providing innovation and stability to ensure your web application succeeds.

Kirschbaum
Harpoon: Next generation time tracking and invoicing logo

Harpoon: Next generation time tracking and invoicing

The next generation time-tracking and billing software that helps your agency plan and forecast a profitable future.

Harpoon: Next generation time tracking and invoicing