Download the PHP package clippings/money-bundle without Composer
On this page you can find all versions of the php package clippings/money-bundle. It is possible to download/install these versions without Composer. Possible dependencies are resolved automatically.
Download clippings/money-bundle
More information about clippings/money-bundle
Files in clippings/money-bundle
Package money-bundle
Short Description This is a Symfony bundle that integrates moneyphp/money library (Fowler pattern): https://github.com/moneyphp/money.
License MIT
Homepage https://github.com/Clippings/TbbcMoneyBundle
Informations about the package money-bundle
TbbcMoneyBundle
This bundle is used to integrate the Money library from mathiasverraes into a Symfony project.
This library is based on Fowler's Money pattern
- This bundle is tested and is stable with Symfony 2.8 and Symfony 3.1
Quick Start
Features
- Integrates money library from mathiasverraes
- Twig filters and PHP helpers for helping with money and currencies in templates
- A storage system for currency ratios
- A ratioProvider system for fetching ratio from externals api
- Symfony form integration
- Console commands for different operations
- A configuration parser for specifying website used currencies
- Access to the history of currency ratio fetched
- Money formatter i18n
Table of contents
- Installation
- Usage
- Storage
- Contributing
- Requirements
- Authors
- Status
Installation
Use Composer and install with
$ composer require tbbc/money-bundle
Then add the bundle in AppKernel :
In your config.yml, add the currencies you want to use and the reference currency.
In your config.yml, add the form fields presentations
You should also register custom Doctrine Money type:
Usage
Money Library integration
Form integration
You have 3 new form types (under Tbbc\MoneyBundle\Form\Type namespace):
- CurrencyType : asks for a currency among currencies defined in config.yml
- MoneyType : asks for an amount and a currency
- SimpleMoneyType : asks for an amount and sets the currency to the reference currency set in config.yml
Example :
Saving Money with Doctrine
Solution 1 : two fields in the database
Note that there are 2 columns in the DB table : $priceAmount and $priceCurrency and only one getter/setter : getPrice and setPrice.
The get/setPrice methods are dealing with these two columns transparently.
- Advantage : your DB is clean and you can do sql sum, group by, sort,... with the amount and the currency in two different columns in your db
- Disadvantage : it is ugly in the entity.
Solution 2 : use Doctrine type
There is only one string column in your DB table. The money object is manually serialized by the new Doctrine type.
1.25€ is serialized in your DB by 'EUR 125'. This format is stable. It won't change in future releases..
The new Doctrine type name is "money".
- Advantage : The entity is easy to create and use
- Disadvantage : it is more difficult to directly request the db in SQL.
Conversion manager
Convert an amount into another currency
Save a conversion value in a DB
Money formatter
Twig integration
PHP templating integration
Fetching ratio values from remote provider
Change the ratio provider
This bundle uses florianv/swap library for requesting currency exchange rates from various providers.
The ratio provider is using yahoo finance provider. You can change the provider to use in the config.yml file:
Here google_provider
is the name of the service which you need to define with Dependency Injection before using, e.g. like so:
You can use any providers as described at florianv/swap project, or even combination of those. The following example will try to use Yahoo provider and if it fails will switch to Google Provider instead:
Create your own ratio provider
A ratio provider is a service that implements the Swap\ProviderInterface
.
I recommend that you read the PHP doc of the interface to understand how to implement a new ratio provider.
The new ratio provider has to be registered as a service.
To use the new ratio provider, you should set the service to use in the config.yml by giving the service name.
Automatic currency ratio fetch
Add to your crontab :
MoneyManager : create a money object from a float
Create a money object from a float can be a bit tricky because of rounding issues.
history of currency ratio with the pairHistoryManager
Doctrine is required to use this feature.
In order to get the ratio history, you have to enable it in the configuration and to use Doctrine.
Then you can use the service :
RatioStorage
Two storages for storing ratios are available : CSV File, or Doctrine By default, TbbcMoneyBundle is configured with CSV File.
If you want to switch to a Doctrine storage, edit your config.yml
Update your database schema :
With the Doctrine storage, currency ratio will use the default entity manager and will store data inside the tbbc_money_doctrine_storage_ratios
Custom NumberFormatter in MoneyFormatter
The MoneyFormatter::localizedFormatMoney ( service 'tbbc_money.formatter.money_formatter' ) use the php NumberFormatter class ( http://www.php.net/manual/en/numberformatter.formatcurrency.php ) to format money.
You can :
- give your own \NumberFormatter instance as a parameter of MoneyFormatter::localizedFormatMoney
- subclass the MoneyFormatter and rewrite the getDefaultNumberFormater method to set a application wide NumberFormatter
Using the TbbcMoneyBundle without Doctrine
You have to disable the pair history service in order to use the TbbcMoneyBundle without Doctrine.
Note : you can imagine to code your own PairHistoryManager for MongoDB or Propel, it is very easy to do. Don't hesitate to submit a PR with your code and your tests.
Optimizations
In your config.yml, you can :
- select the templating engine to use. By default, only Twig is loaded.
- define the decimals count after a unit (ex : 12.25€ : 2 decimals ; 11.5678€ : 4 decimals)
Note about older versions
- Examples above use Symfony 3 syntax for the console (
./bin/console
), for version 2.8 you should use./app/console
instead. - "class" constant (e.g.
MoneyType::class
) is only supported since PHP 5.5, if you have an older version, you should use the full class name instead (e.g.Tbbc\MoneyBundle\Type\MoneyType
)
Contributing
- Take a look at the list of issues.
- Fork
- Write a test (for either new feature or bug)
- Make a PR
Requirements
- PHP 5.3.9+
- Symfony 2.8+
Authors
Philippe Le Van - kitpages.fr - twitter : @plv Thomas Tourlourat - Wozbe - twitter: @armetiz
Status
Stable
what is functional:
- integration of the money library
- configuration parser
- pairManager
- Travis CI integration
- form integration
- Twig presentation for forms
- Twig filters
- commands for ratio creation and ratio display
- automatic ratio fetch (with 2 ratio providers)
- history of currency ratio
All versions of money-bundle with dependencies
ext-curl Version *
symfony/framework-bundle Version ~2.8|~3.0
moneyphp/money Version ^3.0
symfony/form Version ~2.8|~3.0
symfony/twig-bundle Version ~2.8|~3.0
symfony/console Version ~2.8|~3.0
symfony/dom-crawler Version ~2.8|~3.0
florianv/swap Version ^3.2
php-http/message Version ^1.6
php-http/guzzle6-adapter Version ^1.1
composer/installers Version ^1.5