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
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.
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(),
];
// ...
}
// ...
}
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
// 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`;
Option | Type | Default |
---|---|---|
currency | string |
your application locale currency |
grouping | boolean |
false |
scale | integer |
2 |
// 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)
;
}
<!-- 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) }