kučarović/money-bundle

此扩展包为您的 Symfony 项目提供了 Money 库的集成。

安装数量: 53,211

依赖关系: 0

推荐者: 0

安全: 0

星标: 22

关注者: 3

分支: 13

开放问题: 4

类型:symfony-bundle

v1.3.0 2020-01-06 10:49 UTC

README

GitHub Release Travis Total Downloads SensioLabs Insight Software License

JKMoneyBundle

此扩展包为您的 Symfony 项目提供了 Money 库的集成。功能包括

  • 自动添加 Doctrine 映射(使用 Doctrine 嵌入式对象)
  • 自定义 FormType
  • Twig 扩展

安装

步骤 1: 下载扩展包

打开命令行控制台,进入您的项目目录,并执行以下命令以下载此扩展包的最新稳定版本

$ composer require kucharovic/money-bundle

此命令需要您全局安装了 Composer,具体请参考 Composer 文档的 安装章节

步骤 2: 启用扩展包

然后,通过将扩展包添加到项目 app/AppKernel.php 文件中注册的扩展包列表来启用扩展包

<?php
// app/AppKernel.php

// ...
class AppKernel extends Kernel
{
    public function registerBundles()
    {
        $bundles = [
            // ...

            new JK\MoneyBundle\JKMoneyBundle(),
        ];

        // ...
    }

    // ...
}

步骤 3: 配置

默认情况下,扩展包加载应用程序的区域设置并定义其货币代码为默认值。您可以覆盖它

# 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;
    }

此实体映射产生以下表结构

+---------------------+--------------+------+-----+---------+----------------+
| 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    |                |
+---------------------+--------------+------+-----+---------+----------------+

因此,使用聚合函数如 SUMAVG 等查询数据库变得容易

SELECT MAX(`price_amount`), `price_currency_code`
FROM `product`
GROUP BY `price_currency_code`;

表单

// 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 模板

<!-- 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) }