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

Content Decorator Bundle Laravel Package

kaliop/content-decorator-bundle

A Symfony bundle from Kaliop that adds a decoration layer for content objects, letting you attach custom presentation methods and computed values without changing the underlying content model. Helps keep templates clean by moving view-specific logic into reusable decorators.

View on GitHub
Deep Wiki
Context7

Technical Evaluation

Architecture fit — first-order mismatch to resolve before anything else. This is a Symfony bundle for Ibexa (formerly eZ Platform), not a Laravel package. If our stack is Laravel, the assessment ends here: the src/bundle layer is a Symfony DI extension and there is no Laravel service provider, facade, or config bridge. The three-layer split is nonetheless well designed for our purposes: src/contracts is the declared stable API surface, src/lib holds mappers/factories/repositories/events, and src/bundle is pure wiring. That means the valuable part — a typed model and repository layer over Ibexa's untyped Content/ContentInfo/field-value API — is nominally separable, though it will carry Symfony service and Ibexa repository-interface dependencies that make extraction more work than the layer names imply.

Where the value actually is. Ibexa integrations rot because domain code ends up threaded through ContentService, remote IDs, field identifiers, and version/language bookkeeping. A typed repository layer converts that into testable PHP objects and is a real quality and velocity gain for any team maintaining Ibexa content types. This is a narrow, credible utility — not a framework.

Integration feasibility — high inside Ibexa, low outside. Composer install is trivial; the binding constraint is the platform matrix. 2.x pins Ibexa 5.0 + Symfony 7.4 LTS + PHP 8.3+. 1.x pins Ibexa 4.6 + Symfony 5.4 LTS + PHP 8.1+. The maintainers explicitly forbid widening constraints for a major line. That is good discipline but means our upgrade calendar is now coupled to theirs.

Technical risk — high on ecosystem, low on code. Two stars and zero dependents means no downstream validation, no community troubleshooting, and the appearance of a single maintainer. The release metadata (2026-06-03) should be treated as unreliable until we verify actual tags on the repository. Countervailing signal is unusually strong engineering hygiene for a project this size: deptrac-enforced layering, PHPStan, coding-standard checks, SemVer policy, maintenance branches, and tag-driven CI releases to Packagist. That combination means a fork is cheap to own — the scope is small and the quality gates are already written.

Key questions.

  • Are we actually on Ibexa, and which major — 4.6 or 5.0? If Laravel-only, is there a hidden Ibexa service behind a separate front end?
  • Who is the upstream maintainer, what is the release cadence, and is there any implied support relationship?
  • Does src/contracts cover our top content types and field types without patching src/lib?
  • What is mapping coverage for the hard parts: versions, languages, locations, relations, and custom field types?
  • Do the exposed events leak Ibexa types into consumer code, and are listeners wired by default in the bundle config?
  • Are transitive dependency constraints clean against a real Ibexa installation, which is dependency-heavy?

Integration Approach

Stack fit. On Symfony/Ibexa: adopt. On Laravel: reject, or re-scope to porting src/lib behind our own interfaces rather than bridging Symfony's container into Laravel's. The glue cost is not justified by the payload.

Migration path. Greenfield Ibexa 5.0 work: start on 2.x. Existing Ibexa 4.6: start on 1.x, and treat 1.x → 2.x as a planned major with contract-level API changes, budgeted alongside the Ibexa 4.6 → 5.0 jump. Never mix major lines across environments.

Compatibility. Mirror the upstream matrix in CI (PHP 8.3, Symfony 7.4, Ibexa 5.0) and validate with composer validate --strict plus a full install into a representative Ibexa app. Confirm no conflicts with the bundles already installed.

Sequencing.

  1. Spike in a branch: map one real content type end to end through the decorator and its repository.
  2. Audit src/contracts against our top five content types and field types; anything missing is a fork patch, so size it now.
  3. Wrap the bundle's contracts in a thin anti-corruption layer of our own, so our dependency surface is one namespace and a future fork or replacement is a one-file change.
  4. Pin by VCS repository or vendored fork rather than relying solely on Packagist — the low dependent count doesn't warrant trust in tag immutability.
  5. Roll out content type by content type, behind configuration, with integration tests against a seeded Ibexa instance.
  6. Contribute upstream only if we are prepared to fund the maintenance; otherwise own the patch set privately.

Operational Impact

Maintenance. Low steady-state cost, spiky at platform upgrades. We inherit their constraint matrix, so every Symfony or Ibexa major arrives as a coordinated three-way upgrade. MIT licensing makes a fork viable; estimate a few engineer-days per platform major to rebase a private patch set, given the small codebase and the pre-existing cs/phpstan/deptrac gates.

Support. Effectively self-support. GitHub issues only, no SLA, no stated security policy, and no dependents to mine for prior art. Mitigations: name an internal owner, pin the version, and monitor Symfony/Ibexa advisories independently — this package will not surface them for us.

Scaling. Runtime scaling is Ibexa's concern, not the decorator's. The risk is mapping overhead and N+1 behavior when hydrating content lists that traverse relations and locations. Load-test list-heavy endpoints before broad rollout and check whether repositories expose any identity map or caching layer.

Failure modes.

  • DI compile failure on version mismatch — loud and safe.
  • Mapper gaps on unmodeled field types producing nulls or exceptions — quiet and dangerous; cover with contract tests per content type.
  • Breakage inside src/lib from Ibexa minor API changes, which SemVer for this package does not protect us against.
  • Upstream abandonment, stranding us on a Symfony line past support.
  • Event listeners wired by default in the bundle causing unexpected writes during read paths.

Ramp-up. The learning curve is Ibexa, not this bundle. A mid-level PHP developer needs roughly one to two weeks to be productive, and most of that is content-versus-content-info, versions, languages, locations, and remote IDs. Onboarding material should be the src/contracts namespace and our anti-corruption layer, not the README.

Recommendation. Proceed with a two-week spike if and only if we run Ibexa 5.0 (or 4.6 via 1.x) and can name an internal owner. If the stack is Laravel, treat this as out of scope.

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.
3mdikram/worldmoneywords
snowsoft/config
itmosoft/laravel-subscriptions
larva/laravel-ai-qwen
diephp/sequences
users-au/socialite-provider
twidpay/twid-logger
mrnewport/laravel-plaid
mrnewport/laravel-repo
mrnewport/laravel-docsign
mrnewport/laravel-stow
mrnewport/laravel-flow
mrnewport/laravel-priceable
mrnewport/laravel-nestedterms
fredmeng/laravel-apidoc-generator
itstructure/laravel-multilingual-tools
pdustdar/elasticsearch
markupai/php-sdk
rlacerda83/lumem-microservice-shipment
uni-method/symfony-lib