kučarović / money-bundle
此扩展包为您的 Symfony 项目提供了 Money 库的集成。
v1.3.0
2020-01-06 10:49 UTC
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
此扩展包为您的 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 | |
+---------------------+--------------+------+-----+---------+----------------+
因此,使用聚合函数如 SUM
、AVG
等查询数据库变得容易
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) }