grazulex/laravel-arc

A Laravel package for elegant and modern Data Transfer Objects (DTOs) management with automatic validation and direct property access

v1.3.0 2025-08-05 10:34 UTC

This package is auto-updated.

Last update: 2025-08-21 23:39:39 UTC


README

Laravel Arc

Generate modern, type-safe Data Transfer Objects (DTOs) in Laravel from clean YAML definitions โ€” with automatic validation, nested support, and fluent collection handling.

Latest Version Total Downloads License PHP Version Laravel Version Tests Code Style

Overview

Laravel Arc is a powerful Laravel package that simplifies Data Transfer Object (DTO) management through YAML-driven generation. Define your DTOs in simple YAML files and let Laravel Arc generate type-safe, validated PHP classes with automatic property access and comprehensive collection support.

Think of it as Laravel API Resources, but with stronger typing, automatic validation, and generated from YAML definitions.

๐ŸŽฏ Key Features

  • ๐Ÿ—๏ธ YAML-Driven Generation - Define DTOs in clean, readable YAML
  • ๐Ÿ”’ Type Safety - Full PHP 8.3+ type enforcement with readonly properties
  • โœ… Automatic Validation - Generate Laravel validation rules from field definitions
  • ๏ฟฝ ModelSchema Integration - 65+ advanced field types (geometric, JSON, enhanced validation)
  • ๏ฟฝ๐Ÿ”„ Field Transformers - Built-in data transformation (trim, slugify, normalize, etc.)
  • ๐Ÿ“Š Export Formats - Convert to JSON, XML, CSV, YAML, and more
  • ๐ŸŽฏ Behavioral Traits - Timestamps, UUIDs, soft deletes, and tagging
  • ๐Ÿš€ Modern PHP - Leverages PHP 8.3+ features and best practices

๐Ÿ”ง Advanced Field Types (ModelSchema Integration)

Laravel Arc integrates with grazulex/laravel-modelschema to provide 65+ advanced field types:

# Traditional Arc types
fields:
  name:
    type: string
  age:
    type: integer

# Advanced ModelSchema types  
fields:
  coordinates:
    type: point          # Geographic point
  boundary:
    type: polygon        # Geographic polygon
  metadata:
    type: json           # JSON with validation
  tags:
    type: set            # Set collection
  email:
    type: email          # Enhanced email validation
  settings:
    type: jsonb          # PostgreSQL JSONB

Supported Advanced Types:

  • ๐ŸŒ Geometric: point, polygon, geometry, linestring
  • ๐Ÿ“‹ JSON: json, jsonb, set, array
  • ๐Ÿ“ง Enhanced String: email, uuid, url, slug, phone
  • ๐Ÿ”ข Numeric Variations: bigint, tinyint, decimal, money
  • ๐Ÿ“… Date/Time: datetime, timestamp, date, time

๐Ÿ“š Complete Documentation

โžก๏ธ Visit the Wiki for complete documentation, examples, and guides

The wiki contains:

๐Ÿ“ฆ Quick Installation

composer require grazulex/laravel-arc
php artisan vendor:publish --provider="Grazulex\LaravelArc\LaravelArcServiceProvider"

๐Ÿš€ Quick Start

  1. Create a DTO definition:
php artisan dto:definition-init UserDTO --model=App\\Models\\User --table=users
  1. Generate the DTO class:
php artisan dto:generate user.yaml
  1. Use your DTO:
$userData = ['name' => 'John Doe', 'email' => 'john@example.com'];
$userDto = UserDTO::fromArray($userData);

echo $userDto->name; // 'John Doe'
echo $userDto->toJson(); // JSON representation

โš ๏ธ Important Notes

YAML Validation Rules with Commas

When using validation rules that contain commas (like exists:table,column), wrap them in quotes:

# โŒ Wrong - gets split into separate rules
rules: [required, exists:users,id]

# โœ… Correct - stays as one rule  
rules: [required, "exists:users,id"]

This applies to rules like: "exists:table,column", "unique:table,column", "in:value1,value2,value3", etc.

๐Ÿ“– Learn More

๐Ÿ”ง Requirements

  • PHP: ^8.3
  • Laravel: ^12.19
  • Carbon: ^3.10

๐Ÿงช Testing

composer test

๐Ÿค Contributing

We welcome contributions! Please see our Contributing Guide for details.

๐Ÿ”’ Security

Please review our Security Policy for reporting vulnerabilities.

๐Ÿ“„ License

Laravel Arc is open-sourced software licensed under the MIT license.

Made with โค๏ธ by Jean-Marc Strauven