grocery-crud callback_before_insert无效

时间:2013-11-12 19:58:09

标签: codeigniter callback grocery-crud

我正在尝试做一个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;
    }

问题是他只添加了常规字段,即我在myselfe中输入的字段。 但是没有插入被计算的那些

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

        $post_array['tot'] = 100;

只需将字段'tot'设为100即可 在我计算字段

时插入这个phpmyadmin givenull值

我看不出我做错了什么

1 个答案:

答案 0 :(得分:2)

这有点棘手。

因此,出于安全原因,在杂货店CRUD中,您需要在fields方法中指定要保存的所有字段。然后,您可以将此类型设为invisible。正如您在隐藏字段的文档中看到的那样,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;
}