Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php ZF1:如何处理数据库中存储的百分比和用户输入的数据?_Php_Zend Framework_Filter - Fatal编程技术网

Php ZF1:如何处理数据库中存储的百分比和用户输入的数据?

Php ZF1:如何处理数据库中存储的百分比和用户输入的数据?,php,zend-framework,filter,Php,Zend Framework,Filter,我正在尝试处理我申请表中的百分比。用户输入类似12的值(表示12%)。我必须以0.12的比率将其存储在我的数据库中 然后我必须将其显示为12(12%) 显示它的部分非常简单,我使用了一个自定义的视图辅助对象,它将元素值乘以100 最困难的部分是当用户输入值时。我首先想到的是一个过滤器,它每100分一个值。它用于将值存储在数据库中,但是当我检索值时,方法“getValue()”应用过滤器,因此我得到值0.0012 再想一想,我试图重写setValue()方法,也就是每100除以一个值。但是当我填充

我正在尝试处理我申请表中的百分比。用户输入类似12的值(表示12%)。我必须以0.12的比率将其存储在我的数据库中

然后我必须将其显示为12(12%)

显示它的部分非常简单,我使用了一个自定义的视图辅助对象,它将元素值乘以100

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

再想一想,我试图重写setValue()方法,也就是每100除以一个值。但是当我填充表单时,setValue也被调用,这也给了我0.0012

我不知道如何处理这个问题?你知道吗


谢谢

多亏了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没有提供任何钩子来更改数据。

多亏了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不提供任何钩子来更改数据。

可以在以独立方式写入数据库之前使用除法过滤器,而不是表单元素过滤器。所以它只适用于更新数据库。因此,请考虑在读取数据库并填充表单后使用的相反过滤器。所以用户在表单字段中看到值12。设置调用该方法的条件。i、 e.如果设置了$insert,则调用setValue(),如果设置了$update,但$insert未设置-不要调用itI。我同意Dmonix。如果您使用类似于条令的东西作为数据库包装器,那么实现起来会非常容易。为什么会有这么多的旋转?将值存储为简单整数有什么问题?用户输入的数据在计算后使用,例如结果=数据1*百分比。在使用数据时处理数据是很难看的,最好像比率一样存储它。可以使用除法过滤器,而不是表单元素过滤器,而是在以独立方式写入数据库之前使用。所以它只适用于更新数据库。因此,请考虑在读取数据库并填充表单后使用的相反过滤器。所以用户在表单字段中看到值12。设置调用该方法的条件。i、 e.如果设置了$insert,则调用setValue(),如果设置了$update,但$insert未设置-不要调用itI。我同意Dmonix。如果您使用类似于条令的东西作为数据库包装器,那么实现起来会非常容易。为什么会有这么多的旋转?将值存储为简单整数有什么问题?用户输入的数据在计算后使用,例如结果=数据1*百分比。当数据被使用时,处理它是丑陋的,最好像一个比率一样存储它