1

我正在尝试做一个 callback_before_insert,这是我的脚本:

public function brandstof()
{
        $crud = new grocery_CRUD();

        $crud->set_theme('datatables');
        $crud->set_table('invoer');
        $crud->set_subject('Brandstof');
        $crud->required_fields('datum', 'aant_km', 'ltr', 'prijs');
                    $crud->fields('datum', 'aant_dagen', 'aant_km', 'ltr', 'prijs');
                    $crud->order_by('datum', 'desc');
                    $crud->callback_before_insert(array($this,'calculate'));

        $output = $crud->render();

        $this->_example_output($output);
}


    function calculate($post_array)
    {
        $post_array['tot'] = 100;
        $post_array['een_op'] = $post_array['aant_km'] / $post_array['ltr'];
        $post_array['ltr_per_100_km'] = $post_array['ltr'] / $post_array['aant_km'];
        return $post_array;
    }

问题是他只添加了常规字段,即我自己输入的字段。但计算的没有插入

出于测试目的,我添加了这个:

        $post_array['tot'] = 100;

插入此 phpmyadmin 后,只需将字段 'tot' 100 设置为计算字段时给出空值

我看不出我做错了什么

4

1 回答 1

2

这有点棘手。

因此,出于安全原因,在杂货店 CRUD 中,您需要在 fields 方法中指定要保存的所有字段。然后你可以简单地将这种类型设置为invisible。正如您在 invisible field 的文档中看到的,有一个 callback_before_insert 的示例。因此,在您的情况下,您将拥有:

public function brandstof()
{
        $crud = new grocery_CRUD();

        $crud->set_theme('datatables');
        $crud->set_table('invoer');
        $crud->set_subject('Brandstof');
        $crud->required_fields('datum', 'aant_km', 'ltr', 'prijs');
        $crud->fields('datum', 'aant_dagen', 'aant_km', 'ltr', 
            'prijs','tot','een_op','ltr_per_100_km'); //Don't forget to add these fields

        $crud->field_type('tot','invisible');
        $crud->field_type('een_op','invisible');
        $crud->field_type('ltr_per_100_km','invisible');

        $crud->order_by('datum', 'desc');
        $crud->callback_before_insert(array($this,'calculate'));

        $output = $crud->render();

        $this->_example_output($output);
}


function calculate($post_array)
{
    $post_array['tot'] = 100;
    $post_array['een_op'] = $post_array['aant_km'] / $post_array['ltr'];
    $post_array['ltr_per_100_km'] = $post_array['ltr'] / $post_array['aant_km'];
    return $post_array;
}
于 2013-11-13T21:10:29.017 回答