Symfony2形成欧元兑美分

时间:2013-09-08 12:02:47

标签: symfony symfony-forms

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

我的所作所为:

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

2 个答案:

答案 0 :(得分:3)

Sf2 MoneyType处理这种情况!

->add('price', 'money', array(
    'divisor' => 100,
    'attr' => array(
        'style' => 'width: 70px;'
    )
))

答案 1 :(得分: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;
}

有关更多示例,请参阅the documentation