2013-04-03 29 views
1

我正试图在我的应用程序中处理百分比。用户输入一个值为12(12%)。我必须将它存储在我的数据库中,比率为0.12。ZF1:如何处理存储在数据库中的百分比和用户输入的数据?

然后我必须将它显示为12(对于12%)。

我显示它的部分非常简单,我使用了一个自定义的View Helper,它将元素值乘以100。

困难的部分是当用户输入值时。我首先想到了一个过滤器,它按每100个值进行分割。它用于将值存储在数据库中,但是当我检索值时,方法“getValue()”应用筛选器,以便得到值0.0012。

第二个想法是,我尝试重写setValue()方法,以每100个值除数。但是当我填充表单时,setValue也被调用,这也给我0.0012。

我想知道我该如何处理这个问题?你有什么主意吗?

谢谢

+1

Mayby使用您的分隔过滤器不是作为表单元素过滤器,而是在以独立方式写入数据库之前。所以它只适用于更新数据库。因此,在阅读您的数据库和填充表单后,请考虑使用相反的过滤器。所以用户在表单字段中看到值12。 – Dmonix

+0

设置应该调用方法的条件。即如果设置了$ insert,那么如果设置$ update,则调用setValue(),但是$ insert不是 - 不要调用它 –

+0

我同意Dmonix。如果你使用像doctrine这样的东西作为数据库包装,那么实现这一点真的很容易。 – liz

回答

1

感谢Dmonix评论我解决了这个问题。我创建了我的模型两种方法来处理的划分只是数据库插入/更新前:

public function preInsert($event) 
{ 
    $this->_updatePercentageValue(); 
} 

public function preUpdate($event) 
{ 
    $this->_updatePercentageValue(); 
} 

private function _updatePercentageValue() 
{ 
    $value = $this->getValue(); 
    if ($value != null) { 
     $this->setValue($value/100); 
    } 
} 

我意识到,处理它在形式层面是不是一个好主意,因为ZF1不给任何钩在这种情况下更改数据。

相关问题