Weave Code
Weaver
Helps Laravel developers discover, compare, and choose open-source packages. See popularity, security, maintainers, and scores at a glance to make better decisions.
Feedback
Share your thoughts, report bugs, or suggest improvements.
Subject
Message

Enum Laravel Package

elao/enum

Opinionated extensions for PHP 8.1+ native enums with readable labels, flag/bitmask enums, and extra values. Includes integrations for Symfony (Forms, HTTP Kernel arg resolver, Translation, VarDumper), Doctrine ORM/ODM, and Faker.

View on GitHub
Deep Wiki
Context7

Technical Evaluation

Architecture Fit

  • Laravel Compatibility: While the package targets PHP 8.4+ and Symfony 8+, Laravel (v10+) is built on Symfony components and supports PHP 8.4+. The package’s ReadableEnum and DatabaseEnum traits align well with Laravel’s domain-driven design (DDD) patterns, particularly for:
    • Value Objects: Enums as immutable, self-describing types (e.g., UserRole, OrderStatus).
    • Database Mappings: The DatabaseEnum trait simplifies Eloquent model integration (e.g., enum('status') columns).
    • API/Serialization: ReadableEnum enables consistent JSON/API responses (e.g., {"status": "PENDING"} instead of {"status": 1}).
  • Opinionated Extensions: The package’s features (e.g., prefix, description, icon) are highly aligned with Laravel’s needs for:
    • Human-readable labels (e.g., Suit::Hearts->label() → "Hearts").
    • Framework integrations (Symfony Form, Doctrine, API Platform) translate to Laravel’s Form Requests, Validation, and API Resources.
  • Backward Compatibility: Laravel’s native enums (PHP 8.1+) are already supported, but this package future-proofs migrations to PHP 8.4+ while adding missing features (e.g., database storage, serialization).

Integration Feasibility

  • Low Friction for New Projects: Ideal for greenfield Laravel apps targeting PHP 8.4+. The package’s composer install and trait-based adoption require minimal boilerplate.
  • Legacy Migration Challenges:
    • PHP 8.1/8.2 Apps: Would need a major version upgrade (PHP 8.4) to use this package, but Laravel 10+ already enforces PHP 8.2+. Workaround: Use a hybrid approach (native enums + manual serialization) until upgrade.
    • Doctrine/Eloquent: The DatabaseEnum trait assumes raw enum storage (e.g., ENUM('value') in MySQL). Laravel’s Eloquent does not natively support PHP enums in databases (as of v10), requiring:
      • Custom accessors/mutators.
      • Database migrations to use string columns with validation.
      • Risk: Potential performance overhead if enums are stored as strings (but mitigated by useAsString()).
  • Framework-Specific Gaps:
    • Laravel Nova/Panel: No native support; would need custom field types.
    • Livewire/Inertia: Manual serialization required for frontend binding.

Technical Risk

Risk Area Severity Mitigation Strategy
Database Schema Changes High Test DatabaseEnum with Laravel’s migrations. Use useAsString() for compatibility.
PHP 8.4 Dependency Medium Block upgrade if PHP 8.4 isn’t feasible. Use native enums as fallback.
Symfony Integration Low Laravel’s Symfony components (e.g., Forms) will work; test edge cases.
Performance Overhead Low Benchmark serialization/deserialization vs. native enums.
Ecosystem Lock-in Medium Package is MIT-licensed; vendor it if concerns arise.

Key Questions

  1. Database Strategy:
    • Will we use ENUM columns (MySQL) or string columns with validation?
    • How will we handle legacy data migrations?
  2. PHP Version:
    • Can we upgrade to PHP 8.4+ to unlock all features?
  3. Team Adoption:
    • Does the team prefer native enums (simpler) or extended features (e.g., icons, descriptions)?
  4. Testing:
    • Are there existing tests for DatabaseEnum + Eloquent interactions?
  5. Alternatives:
    • Would spatie/laravel-enum (Laravel-specific) suffice, or do we need Symfony integrations?

Integration Approach

Stack Fit

  • Laravel 10+: Full compatibility with PHP 8.4+ and Symfony 6.4+ components.
  • Key Integrations:
    • Eloquent Models: DatabaseEnum trait for enum-like columns (requires custom accessors).
    • Validation: Works with Laravel’s Rule::in() or custom rules.
    • APIs: ReadableEnum ensures consistent JSON responses (e.g., {"status": "ACTIVE"}).
    • Forms: Integrates with Symfony Forms (via Laravel’s bridge) for type-safe options.
    • Blade/Templating: Use ->label() or ->value for human-readable output.
  • Non-Integrations:
    • Laravel Nova: Requires custom field types.
    • Queue Jobs: Enums must be serialized manually (e.g., ->value).

Migration Path

  1. Assessment Phase:
    • Audit existing const-based enums or string magic values.
    • Identify high-value candidates (e.g., UserRole, PaymentStatus).
  2. Pilot Migration:
    • Replace 1–2 enums with elao/enum in a feature branch.
    • Test with:
      • Eloquent models (database storage).
      • API responses (serialization).
      • Form requests (validation).
  3. Full Rollout:
    • Database: Update migrations to use string columns with validation (if not using ENUM).
    • Codebase: Replace const enums with elao/enum classes.
    • Frontend: Update API contracts and Livewire/Inertia bindings.
  4. Fallback Plan:
    • Use native PHP enums with manual serialization if elao/enum features aren’t critical.

Compatibility

Component Compatibility Notes
PHP 8.4+ Required for full feature set.
Laravel 10+ Works seamlessly; Symfony components are compatible.
MySQL ENUM columns work with DatabaseEnum; otherwise, use string with validation.
PostgreSQL No native ENUM support; use string with check constraints.
SQLite No ENUM type; use string with validation.
API Platforms ReadableEnum ensures consistent JSON output.
Testing Works with Pest/PHPUnit; no framework-specific quirks.

Sequencing

  1. Phase 1: Core Enums (2–4 weeks)
    • Migrate domain-critical enums (e.g., OrderStatus, UserRole).
    • Test database storage and API serialization.
  2. Phase 2: Framework Integrations (1–2 weeks)
    • Integrate with Form Requests, Validation, and Symfony Forms.
  3. Phase 3: UI/UX (1–2 weeks)
    • Update Blade templates and frontend bindings (Livewire/Inertia).
  4. Phase 4: Legacy Support (Ongoing)
    • Deprecate old const enums; add migration scripts for database changes.

Operational Impact

Maintenance

  • Pros:
    • Reduced Boilerplate: Traits handle serialization, validation, and database logic.
    • Type Safety: PHP 8.4 enums + IDE autocompletion improve developer experience.
    • Consistency: Enforces standardized labels/values across APIs and UI.
  • Cons:
    • Vendor Lock-in: Opinionated features (e.g., prefix, icon) may require package updates.
    • Migration Debt: Legacy const enums or string values may need cleanup.
  • Long-Term Costs:
    • Database Schema: Future changes to enums may require migrations.
    • Testing: Add tests for enum serialization/deserialization.

Support

  • Debugging:
    • Common Issues:
      • Database storage mismatches (e.g., ENUM vs. string).
      • Serialization errors in APIs/queues.
    • Tools:
      • Use php artisan tinker to inspect enum values/labels.
      • Add custom error handlers for invalid enum casts.
  • Documentation:
    • Gaps: Package lacks Laravel-specific examples (e.g., Nova, Livewire).
    • Solution: Create internal docs for:
      • Database migration patterns.
      • API serialization edge cases.
      • Frontend integration (e.g., Inertia page props).
  • Community:
    • Limited Adoption: Only 326 stars; rely on Symfony community knowledge.
    • Workaround: Engage with Elao’s GitHub issues or fork for customizations.

Scaling

  • Performance:
Weaver

How can I help you explore Laravel packages today?

Conversation history is not saved when not logged in.
Prompt
Add packages to context
No packages found.
gmostafa/php-graphql-client
xeviant/paystack
snowsoft/faker
meditationsteps/blogetc
animalyoung/laravel-influxdb
onix-solutions/sms-telera
lonely-lights/prosetta
oxygen/data
oxygen/core
jengo/base
xiloryx/log-collector
a21ns1g4ts/filament-stripe
la-php/laravel-admin
artisan-build/community-prompts
vleroy/smart
ayles-software/laravel-australian-public-holidays
cboxdk/laravel-id-spatie
cboxdk/laravel-id-billing
cboxdk/laravel-id-billing-bridge
simple-as-fuck/php-performance-log