Weave Code
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

Metadata Laravel Package

fsi/metadata

DEPRECATED: do not use. FSi Metadata Component reads class configuration metadata from sources like annotations (currently PHP annotations only). Provides a ClassMetadata object and abstract drivers (e.g., annotation driver) to store class/property/method metadata.

View on GitHub
Deep Wiki
Context7

Product Decisions This Supports

  • Build vs. Buy: Avoid reinventing metadata parsing wheels for annotations, YAML, or XML, reducing development time and technical debt. This package provides a pre-built, extensible solution for metadata-driven architectures, which is particularly valuable for teams already using annotations or external configuration files.
  • Roadmap: Enables metadata-driven development for dynamic features like:
    • API Contracts: Define request/response schemas in annotations or YAML (e.g., OpenAPI-like contracts without Swagger).
    • Validation Rules: Centralize validation logic (e.g., replace @Assert\NotBlank with custom annotations for domain-specific rules).
    • Plugin Systems: Allow third-party plugins to declare metadata (e.g., hooks, permissions) via annotations or config files.
    • Caching Strategies: Optimize performance for metadata-heavy applications (e.g., large Laravel apps with frequent reflection).
  • Use Cases:
    • Legacy Migration: Gradually replace hardcoded logic (e.g., in controllers, services) with declarative metadata for maintainability.
    • Multi-Source Configurations: Merge metadata from annotations + YAML/XML (e.g., default values in annotations, overrides in YAML).
    • Custom Metadata Stores: Extend ClassMetadataInterface to store domain-specific data (e.g., for e-commerce rules, CMS content types, or workflows).
    • Symfony/Laravel Hybrid Apps: Leverage existing AnnotationReader or Doctrine\Common\Cache in Laravel projects (with adapters).
  • Performance Optimization: Reduce reflection overhead in Laravel by caching metadata (e.g., in Redis or filesystem) for frequently accessed classes.

When to Consider This Package

  • Adopt if:

    • Your Laravel project uses annotations (or plans to) for metadata but lacks a standardized parser (e.g., beyond doctrine/annotations).
    • You need multi-source metadata (annotations + YAML/XML) without coupling to Doctrine ORM or Symfony.
    • Performance is critical, and you can cache metadata (e.g., in Laravel’s cache backends like Redis or database).
    • You’re building a metadata-driven framework (e.g., for plugins, dynamic APIs, or microservices) and want to avoid reinventing the wheel.
    • Your team prefers declarative configurations over hardcoded logic (e.g., replacing if-else checks in controllers with metadata-driven routing).
    • You’re migrating from Symfony 2 and want to reuse existing annotation-based metadata in Laravel.
  • Look elsewhere if:

    • You’re using Laravel 9+ with PHP 8+: Prefer native attributes (#[Attribute]) + ReflectionAttribute for metadata, as they’re more performant and future-proof.
    • Your metadata is simple: Hardcoding or using Laravel’s built-in helpers (e.g., data_get, macroable traits) may suffice.
    • You require active maintenance: This package is deprecated (MIT-licensed but abandoned). Consider alternatives:
    • You’re not using caching: The package’s value diminishes without caching (e.g., reflection overhead remains).
    • Your project is greenfield: Start with Laravel’s native tools (attributes, reflection) instead of legacy annotation-based solutions.

How to Pitch It (Stakeholders)

For Executives: "This package lets us externalize and standardize class configurations—like validation rules, API contracts, or business logic—into annotations or YAML files, making our system more flexible and easier to maintain. For example, instead of hardcoding a controller’s response format in PHP, we could define it once in an annotation and reuse it across services. This reduces technical debt, speeds up development, and future-proofs our architecture. While it’s deprecated, it’s a stable, MIT-licensed solution for now, and we can migrate to Laravel’s native attributes later if needed. The caching feature ensures performance won’t degrade as our codebase grows, which is critical for [scale/performance goals]."

For Engineers: *"This package gives us a unified way to parse metadata from annotations, YAML, or XML into structured objects (ClassMetadata). Key benefits for Laravel:

  • Avoid duplication: Replace repetitive reflection logic in controllers/services with declarative metadata (e.g., dynamic validation, API responses).
  • Extensible: Override ClassMetadataInterface to store custom data (e.g., for a plugin system or CMS).
  • Cache-friendly: Reduce reflection overhead with Laravel’s cache (Redis, database) via a custom adapter.
  • Symfony-compatible: Works with doctrine/annotations and Doctrine\Common\Cache, which Laravel can integrate with minimal effort.

Tradeoffs:

  • It’s deprecated, but we can fork it or migrate to Laravel’s attributes later.
  • Requires adapters for Laravel’s DI container and caching (e.g., wrapping Doctrine\Common\Cache).
  • Not ideal for greenfield projects—Laravel’s native attributes are a better long-term choice.

Proposal: Let’s prototype this for [specific use case, e.g., dynamic API contracts or plugin metadata] and compare it to building a custom solution with attributes. If it saves >20% dev time, it’s worth adopting temporarily."*

For Architects: *"This package aligns with our goal of metadata-driven architectures but introduces tradeoffs:

  • Pros:
    • Standardizes metadata parsing across annotations/YAML/XML.
    • Enables runtime configuration without redeploys (e.g., feature flags in YAML).
    • Works with existing Symfony/Laravel tools (e.g., AnnotationReader, Doctrine\Common\Cache).
  • Cons:
    • Deprecated: Risk of breaking changes or lack of security updates.
    • Laravel Integration: Requires adapters for caching/DI (e.g., DoctrineCacheAdapter).
    • Performance: Reflection is slow; caching is mandatory for scalability.

Recommendation: Use this for legacy migration or short-term gains (e.g., plugin systems), but plan to migrate to Laravel’s attributes (PHP 8+) within 12–18 months. Prioritize use cases where multi-source metadata (annotations + YAML) provides unique value."*

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.
babenkoivan/elastic-client
innmind/static-analysis
innmind/coding-standard
datacore/hub-sdk
alengo/sulu-http-cache-bundle
develia/commons
cuci/prototurk-sdk
cuci/prototurk-sdk-symfony
develia/geo-bundle
dreamzy/livewire-charts
touchestate-sdk/php-sdk
22h/doctrine-garbage-collection-bundle
imbo/imbo-coding-standard
visualbuilder/filament-lottie
servicioslineaonce/starter-kit
atomcoder/laravel-reorderable
irajul/filament-shadcn-theme
agtp/agtp-php
agtp/mod-php
centraldesktop/protobuf-php