【发布时间】:2016-02-02 01:53:02
【问题描述】:
我正在处理一个包含价格 信息的费用实体,为此我选择从货币(字符串)中拆分金额(整数)。
/**
* @var integer
*
* @ORM\Column(name="price_amount", type="integer")
*/
private $priceAmount;
/**
* @var string
*
* @ORM\Column(name="price_currency", type="string", length=10)
*/
private $priceCurrency;
我正在使用 MoneyBundle(通过 TBBC 捆绑包)让 creation 表单显示支持的货币列表并让用户选择正确的货币。表单验证后,价格货币作为字符串存储在数据库中。
// ExpenseType.php
[...]
use Tbbc\MoneyBundle\Form\Type\CurrencyType;
[...]
$builder
->add('priceAmount', NumberType::class, array(
'label' => 'Amount spent',
'attr' => array(
'placeholder' => "Amount",
'autocomplete' => 'off'
)))
->add('priceCurrency', CurrencyType::class, array(
'label' => 'Currency'
))
我正在尝试创建另一个表单类型 ExpenseEditType(扩展上面的 ExpenseType),这将帮助用户修改金额(金额本身 + 其货币);显然,当我加载 ExpenseEditType 表单时,symfony 尝试从我的学说实体创建 CurrencyType,但它只在数据库中找到一个字符串(例如“CAD”、“EUR”等)。
$form = $this->createForm(new ExpenseEditType(), $expense);
引发异常:
给定“货币”、“字符串”类型的预期参数
我的问题是:如何创建与创建表单相同的表单,并要求 symfony 显示相同的货币列表,并在我的 price.currency 字段中选择默认值?
我正在考虑 2 个选项(但我可能完全错了): - 使用 DataTransformer,但只是从 Symfony 开始,我真的对这种东西一无所知 - 在我的 Expense 实体中有一个额外的 Money 字段,它将金额+货币信息存储在一个单独的 Money 字段中,位于我的 2 个单独字段(金额/货币)之上;我想坚持使用这 2 个单独的字段,以便在数据库中更好地查询可能性和 lisibility。
非常感谢您的帮助和建议! 文森特
【问题讨论】:
-
按照上面关于 DataTransformers 的链接进行操作 - 它非常简单,无需担心。您想将您的字符串转换为 Currency 并且给出的示例基本上正是您想要的。
标签: php forms symfony doctrine-orm currency