0

我有一个可以填写欧元的表格,我的实体只知道美分并且是整数。所以我想创建(不确定我是否使用正确的方法)表单转换器。

我做什么:

class EuroTransformer implements DataTransformerInterface
{
    public function transform($euro)
    {
        return $euro * 100;
    }

    public function reverseTransform($euro)
    {
        return $euro / 100;
    }
}

形式:

->add('price', 'money', array(
    'attr' => array(
        'style' => 'width: 70px;'
    )
))
->addModelTransformer($euroTransformer)

但我收到下一条消息:

The form's view data is expected to be an instance of class Entity\InvoiceRule, but is a(n) integer. You can avoid this error by setting the "data_class" option to null or by adding a view transformer that transforms a(n) integer to an instance of Entity\InvoiceRule. 

是的,我的默认选项中已经有一个 data_class 。

如何解决我的问题?

使用 symfony2 2.2

4

2 回答 2

3

Sf2 MoneyType 处理这种情况!

->add('price', 'money', array(
    'divisor' => 100,
    'attr' => array(
        'style' => 'width: 70px;'
    )
))
于 2013-09-08T13:40:30.630 回答
0

您需要在reverseTransform方法中返回一个对象:

/**
 * @param int $cents
 * 
 * @return InvoiceRule
 */
public function reverseTransform($cents)
{
    $euro = new InvoiceRule();
    $euro->setValue($cents / 100);

    return $euro;
}

而且您的transform方法必须将对象转换为数字:

/**
 * @param InvoiceRule $euro
 * 
 * @return int
 */
public function transform($euro)
{
    return $euro->getValue() * 100;
}

有关更多示例,请参阅文档

于 2013-09-08T12:15:06.453 回答