我有一个表格,我可以填写我的欧元,我的实体只知道美分,是一个整数。 所以我想创建(不确定我是否使用正确的方法)形成变换器。
我的所作所为:
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
答案 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。