我是Symfony2的新手,只是通过一些现有的代码库来破解我的方式。我需要帮助来了解如何实现以下结果。
我有一个存储的PriceList实体:
DollarCostPrice, PercentDiscount1, PercentDiscount2, PercentCommission
我希望用户通过表单输入以下4个值:
SalePrice, DollarDiscount1Price, DollarDiscount2Price, PercentCommission
其中,
SalePrice = (DollarCostPrice + (PercentCommission * DollarCostPrice))
DollarDiscount1Price = ((DollarCostPrice + (PercentCommission * DollarCostPrice)) * (100 - PercentDiscount1)/100)
DollarDiscount2Price = ((DollarCostPrice + (PercentCommission * DollarCostPrice)) * (1 - PercentDiscount2)/100)
但是,一旦用户输入了上述值,我将计算需要在实体中保留的DollarCostPrice, PercentDiscount1, PercentDiscount2, PercentCommission
。
我想在表单中使用上述4个字段的集合,以便用户可以一次输入多个项目的此信息。
我在Symfony2中使用表单,集合和数据转换器仍然是新手。如果有人能帮我确定最佳方法,我将不胜感激。
答案 0 :(得分:0)
我会这样做。注意我在这里做出假设,例如,您没有提供有关哪些实体与PriceList相关的任何信息。
添加非映射字段:
- > add('SalePrice',null,array('mapped'=> false))
我假设PriceList与某种SKU对象或类似对象有关系。您需要考虑如何管理这种关系。
在保存时,我最初只是在控制器中进行实体计算,以便快速启动并运行例如。
$yourForm->handleRequest($request);
if ($yourForm->isValid()) {
// loop through elements in your collection - note for non mapped fields
// you need to access them like so: $form->get("DollarDiscount1Price")->getData();
// calculate the data you wish to save to each PriceList entity, set and persist it
$entityManager->persist($priceListEntity);
// finish & finally flush
$entityManager->flush();
}
然后我可能会将该功能移到表单事件监听器。
我不认为自己需要数据转换器,因为它会增加复杂性。如果您计划以多种形式重复使用此功能,但我不认为我会担心它。
人们会告诉你X是理想的解决方案,但是IMO开始时很简单,并且随时随地改进。