【问题标题】:grocery-crud callback_before_insert not working杂货店回调_before_insert不起作用
【发布时间】:2013-11-12 19:58:08
【问题描述】:

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

只需将字段设为 'tot' 100 在我插入这个 phpmyadmin 后,当涉及到计算字段时,给出了 null 值

我看不出我做错了什么

【问题讨论】:

    标签: codeigniter callback grocery-crud


    【解决方案1】:

    这有点棘手。

    因此,出于安全原因,在杂货店 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;
    }
    

    【讨论】:

    • 嗨,约翰,我对此进行了测试,我添加了所有字段并隐藏了一些字段,我复制了您的代码并将字段 ID 添加为隐藏,所以现在所有字段都在,但结果仍然相同.未插入计算字段。有没有办法使用 vardum 或 print_r 来检查问题所在?或者我可以设法收到错误消息吗?
    • 问题现在解决了,约翰你的回答是正确的。我编辑了我的脚本,但是当我显示它时,什么也没发生。那是因为我编辑了错误的剧本,这完全有道理,它不起作用……好吧,我走到角落里,羞辱了我的眼睛。谢谢你的帮助,约翰它有效
    猜你喜欢
    • 2014-06-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-29
    相关资源
    最近更新 更多