kucharovic / money-bundle
This bundle provides integration for Money library in your Symfony project.
Installs: 53 439
Dependents: 0
Suggesters: 0
Security: 0
Stars: 22
Watchers: 3
Forks: 12
Open Issues: 4
Type:symfony-bundle
Requires
- php: ^7.1
- ext-intl: *
- doctrine/orm: ^2.5
- moneyphp/money: ^3.1
- symfony/framework-bundle: ^3.0 || ^4.0 || ^5.0
Requires (Dev)
- phpunit/phpunit: ^7.0
- symfony/form: ^3.0 || ^4.0 || ^5.0
- twig/twig: ^1.30 || ^2.0 || ^3.0
Suggests
- symfony/form: To use Symfony FormType for handling Money data
- twig/twig: To use Twig filter to display Money object in your templates
Conflicts
- symfony/form: <3.0
- twig/twig: <1.34|>=2.0,<2.4
README
JKMoneyBundle
This bundle provides integration for Money library in your Symfony project. Features include:
- Automatically add Doctrine mappings (use Doctrine embeddable objects)
- Customized FormType
- Twig extension
Installation
Step 1: Download the Bundle
Open a command console, enter your project directory and execute the following command to download the latest stable version of this bundle:
$ composer require kucharovic/money-bundle
This command requires you to have Composer installed globally, as explained in the installation chapter of the Composer documentation.
Step 2: Enable the Bundle
Then, enable the bundle by adding it to the list of registered bundles
in the app/AppKernel.php
file of your project:
<?php // app/AppKernel.php // ... class AppKernel extends Kernel { public function registerBundles() { $bundles = [ // ... new JK\MoneyBundle\JKMoneyBundle(), ]; // ... } // ... }
Step 3: Configuration
By default, bundle load your application locale and define it's currency code as default. You can override it:
# app/config/config.yml jk_money: currency: USD
Usage
Entity
// src/AppBundle/Entity/Proudct.php use Doctrine\ORM\Mapping as ORM; use Money\Money; // ... class Product { // ... /** * @var Money * * @ORM\Embedded(class="Money\Money") */ private $price; // ... public function __construct() { $this->price = Money::CZK(0); } public function setPrice(Money $price): void { $this->price = $price; } public function getPrice(): Money { return $this->price; }
This entity mapping produces following table structure:
+---------------------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+---------------------+--------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| name | varchar(255) | NO | | NULL | |
| price_amount | varchar(255) | NO | | NULL | |
| price_currency_code | char(3) | NO | | NULL | |
+---------------------+--------------+------+-----+---------+----------------+
So it's easy to query database using aggregate functions like SUM
, AVG
, etc:
SELECT MAX(`price_amount`), `price_currency_code` FROM `product` GROUP BY `price_currency_code`;
Form
// src/AppBundle/Entity/Proudct.php // ... use JK\MoneyBundle\Form\Type\MoneyType; class ProductType extends AbstractType { /** * {@inheritdoc} */ public function buildForm(FormBuilderInterface $builder, array $options) { $builder ->add('name') ->add('price', MoneyType::class) ; }
Twig templates
<!-- 1 599,90 Kč --> Formated with czech locale {{ product.price|money }}<br> <!-- 1599,9 --> You can also specify scale, grouping and hide currency symbol {{ product.price|money(1, false, false) }