padam87 / money-bundle
Symfony bundle for https://github.com/moneyphp/money
Installs: 1 251
Dependents: 0
Suggesters: 0
Security: 0
Stars: 4
Watchers: 2
Forks: 3
Open Issues: 1
Type:symfony-bundle
Requires
- php: ^7.4 || ^8.0
- ext-bcmath: *
- doctrine/doctrine-bundle: ^1.5 || ^2.0
- doctrine/orm: ^2.5
- moneyphp/money: ^3.1
- symfony/framework-bundle: ^4.0 || ^5.0 || ^6.0
Requires (Dev)
- phpunit/phpunit: ^7.2
README
Symfony bundle for https://github.com/moneyphp/money
As an opinionated bundle, this money bundle uses the following principles as it's main guide:
- Storage is just as important as calculation.
- Financial data should be held in SQL, so Doctrine ORM only implementation.
- Money objects are Embeddables.
- Amount should be stored in a human readable way in the database.
- ISO money scale (eg smallest amount is 1 cent for EUR) is not viable for complex applications.
To achieve these, the following restrictions apply:
- precision and scale are mandatory (but have default values)
- amounts are mapped as DECIMAL (changable, but not recommended to change)
- ext-bcmath is mandatory.
(DECIMAL database values are converted to string by PDO.
This bundle uses bcmath to multiple these values by ˙pow(10, $scale)˙, and pass integer values to the
Money
object. https://github.com/Padam87/MoneyBundle/blob/master/Doctrine/Type/MoneyAmountType.php#L45)
Installation
composer require padam87/money-bundle
Configuration (optional)
padam87_money: precision: 18 scale: 2 currencies: # Default: - EUR
Usage
Doctrine
/** * @var Money * * @ORM\Embedded(class="Money\Money") */ private $price;
Formatting
The bundle adds 2 services.
padam87_money.number_formatter
- A simple \NumberFormatter
object, with the current request's locale, and currency style.
Money\Formatter\IntlMoneyFormatter
- Intl money formatter