tbbc/money-bundle
A Symfony bundle that integrates the moneyphp/money library into your application, offering Twig filters and extensions for formatting monetary values, form types for money input, and ready-to-use services for safe currency handling.
Architecture fit. This is a Symfony bundle, not a Laravel package. Its value is not the money model itself — that lives in moneyphp/money, which is framework-agnostic — but the Symfony wiring around it: DI container registration, form types, validators, Twig extensions, and Doctrine types. Laravel is built on selected Symfony components, not the Symfony framework, so there is no bundle kernel to register against. The architecture fit for the bundle in a Laravel codebase is poor; the fit for the underlying library is strong.
Integration feasibility. Low to moderate. Installing it will not auto-wire anything in Laravel. A team would either (a) use moneyphp/money directly, which is the pragmatic path, or (b) write a Laravel service provider that reimplements the handful of bundle features actually needed. Option (b) is usually a day or two of work and removes the dependency entirely. The bundle itself only becomes a natural fit if the estate already runs Symfony services where bundle registration is native.
Technical risk. Moderate, concentrated in the wrapper rather than the domain library. Signals: 196 stars, 0 listed dependents, a small maintainer footprint, and a last-release date of 2026-10-12 that is future-dated relative to normal release metadata — verify the actual tag history before treating it as actively maintained. Version constraints will track Symfony majors, and those upgrade cycles are the bundle's problem, not moneyphp/money's. MIT licensing is clean.
Key questions.
Money value object?moneyphp/money itself already in the dependency graph, and at what major version?Stack fit. Poor on a pure Laravel stack. Laravel's container, validation pipeline, and Blade do not consume Symfony form types, validators, or Twig extensions. The practical fit is: adopt moneyphp/money as the canonical money library, then build or adopt a thin Laravel-native integration layer — a service provider binding, an Eloquent cast for money columns, a validation rule, and a Blade/JSON formatter. That layer is small, owned by us, and versioned against Laravel rather than Symfony.
Migration path. (1) Standardize on moneyphp/money for all monetary arithmetic and storage. (2) If Symfony services exist elsewhere in the portfolio, evaluate the bundle there in isolation. (3) For Laravel, port only what is needed — the Doctrine type is irrelevant under Eloquent; form types and validators translate to Laravel validation rules and casts. (4) Do not plan to adopt the bundle first and migrate later; the migration is a rewrite of the same wiring with no retained value.
Compatibility. Confirm the PHP constraint against our runtime, the moneyphp/money major version, and any Symfony component versions already pulled in transitively. Note that Laravel ships Symfony components such as http-foundation and console, but not FrameworkBundle; bundle registration requires the latter and will not work. Also check that the bundle's supported Symfony majors do not pin an older component version that conflicts with Laravel's constraints.
Sequencing. Confirm the business need for multi-currency and rounding-safe arithmetic → standardize on moneyphp/money → implement the Laravel integration layer (provider, cast, rule, formatter) → document minor-units and rounding conventions → revisit this bundle only if a Symfony service enters the portfolio. The bundle should be treated as a reference implementation for the wiring, not a dependency.
Maintenance. Low if the bundle is skipped: moneyphp/money is widely used and maintained, and our integration layer is small enough to own. If adopted, we inherit Symfony major-version churn on a wrapper with a thin maintainer base and no dependents signaling ecosystem validation — that is ongoing tax for functionality we would mostly not use.
Support. Community-only under MIT, no vendor SLA. Documentation for the bundle assumes Symfony familiarity; internal docs will be required either way. Escalation path is upstream issues on a low-traffic repository, which is a real risk for anything touching revenue calculations.
Scaling. Monetary arithmetic is CPU-trivial; there is no throughput concern. The scaling concern is organizational: every developer touching prices must understand integer minor units, currency precision, and rounding modes. Neither the bundle nor the underlying library removes that requirement, and a wrapper can create a false sense of safety.
Failure modes. Silent currency or rounding errors are the severe case and are a domain risk, not a package risk. Package-specific failures: Symfony major upgrades breaking the bundle; abandonment of the wrapper forcing an unplanned rewrite; misuse of the Doctrine money type in an Eloquent context where it does nothing; and the anomalous future-dated release suggesting registry or metadata issues — verify tags before pinning. Dependency pinning and a lockfile mitigate the upgrade class of failures.
Ramp-up. Low for moneyphp/money — it is a familiar value-object pattern with good documentation. Moderate-to-high if a team attempts to force the Symfony bundle into Laravel, because effort goes into wiring that can never fit and into debugging container behavior that Laravel does not provide. Budget roughly a day for a capable Laravel engineer to build the native integration, versus open-ended time spent bending the bundle.
How can I help you explore Laravel packages today?