elcodi/currency-bundle
Currency Bundle is a Symfony package from the Elcodi e-commerce suite for managing currencies in your application. It provides currency entities, services, and framework integration under the MIT license as part of the read-only Elcodi project.
Architecture fit. Despite the "Laravel/PHP package" framing, elcodi/currency-bundle is a Symfony Bundle, not a framework-agnostic library. Its runtime contract depends on Symfony's DependencyInjection component (Extension, Configuration, service YAML/XML definitions), the Symfony EventDispatcher, and the Elcodi core abstractions it extends. In a Laravel application none of those integration seams exist: there is no Bundle registration, no services.yml loading, no Symfony dispatcher to bind to. The genuinely portable portion is narrow — currency code/value objects, formatting/rounding helpers, and a repository interface — perhaps 20–30% of the package. The rest is Symfony plumbing that Laravel will not consume.
Integration feasibility. Feasible only as an extraction, not an installation. composer require elcodi/currency-bundle into a Laravel project would drag in Elcodi core components and Symfony packages, produce container/event-dispatcher conflicts, and leave you with services you must manually boot. There is no Laravel service provider, no facade, no config publishing. A realistic path is to copy the currency domain classes into app/Support/Currency (or a first-party package), replace Symfony events with Laravel events, replace Bundle configuration with a config/currency.php, and write binding in an AppServiceProvider.
Technical risk (high).
Key questions for the business.
moneyphp/money + brick/money or Laravel's own formatting covers it with active maintenance.Stack fit. Poor as a package; moderate as a reference implementation. Laravel's idioms (service container bindings, config/*.php, Eloquent or plain repositories, Illuminate\Events) have direct equivalents for every Elcodi concept, but the translation must be hand-written. There is no shim, bridge, or community adapter.
Migration path. Recommend do not adopt the bundle. Two viable alternatives, in order of preference:
moneyphp/money (with brick/money for allocation/rounding, and a Laravel formatting layer) is actively maintained, PHP 8+ compatible, framework-agnostic, and has a large dependent base. Wrap it behind a small CurrencyService interface so the choice is reversible. This is the lowest-risk option and delivers equivalent or better functionality.Compatibility. Verify PHP constraints before anything else: inspect composer.json for php and symfony/* requirements. Expect to pin or patch. Do not attempt to run the Bundle inside Laravel's container — the abstractions do not map and the debugging cost is unbounded.
Sequencing.
Maintenance. This is the dominant cost. Adopting archived code transfers maintenance to us permanently: dependency bumps, PHP upgrades, security reviews, and bug fixes all become internal work with no upstream to lean on. Budget an ongoing owner, not a one-off integration. The alternative (maintained library) shifts that cost to a vendor/community and is the reason I recommend against adoption.
Support. None from upstream — the README explicitly declines PRs and points to a defunct monorepo. Community channels (Gitter, Twitter, docs site) are dormant and the documentation URL is almost certainly dead. Internal engineers become the sole source of truth; onboarding depends on whoever performed the extraction.
Scaling. Currency formatting and lookup are trivially cheap — stateless, cacheable, not a throughput concern. The scaling question only becomes real if you add FX conversion, which this package does not provide; that would require an exchange-rate provider, caching, and rate-staleness handling, all of which is new build, not inherited value. Plan to cache formatted output per (amount, currency, locale) if used on hot render paths.
Failure modes.
Ramp-up. Domain ramp-up is low: currencies, symbols, and rounding are well-understood and the mental model transfers in days. Framework ramp-up is the trap — engineers must learn Elcodi's Symfony-era conventions (Bundle extensions, compiler passes, event subscribers) purely to read and then delete the code. That is pure overhead with no reusable payoff. Mitigate by extracting into idiomatic Laravel services early and never letting the Symfony scaffolding into app/.
How can I help you explore Laravel packages today?