【问题标题】:How to call a custom sibling method of custom helper in codeigniter and use database如何在codeigniter中调用自定义助手的自定义兄弟方法并使用数据库
【发布时间】:2020-05-03 19:13:12
【问题描述】:

编辑

<?php   defined('BASEPATH') OR exit('No direct script access allowed');




 function getCrud($table_name, $subject)
{

    $CI =& get_instance();
    $CI->load->database();

    $crud = new grocery_Crud();
    $crud->set_table($table_name);
    $crud->set_subject($subject);
    $crud->unset_read();
    $crud->unset_clone();
    $crud->where(array($table_name.'.flag' => '1'));

    $crud->callback_delete(function ($primary_key) use ($table_name) {
        return $CI->db->update($table_name, array('flag'=>'0'), array('id'=>$primary_key));
    });

    return $crud;
}

 function oneToMany($table_name, $subject, $rel_table,$field='name')
{

    $crud = getGrocreyCrud($table_name, $subject);
    $crud->set_relation($rel_table.'_id', $rel_table, 'name', array('flag' => '1'));
    $output = $crud->render();
    return $output;
}

我无法使用 ci get 实例调用上述函数 getCrud。 还有其他方法吗??

return $CI->db->update($table_name, array('flag'=>'0'), 数组('id'=>$primary_key)); 在控制器中使用这些代码行时 ($CI 在控制器中将是 $this) 我可以将标志设置为 0,但在帮助程序中它没有发生

【问题讨论】:

  • 您是要创建帮助程序还是库?似乎您将两者混为一谈,并且处于混乱的世界中。我强烈建议您阅读 Codeigniter 用户指南,了解如何编写帮助程序/库。
  • 你说的“不能调用上面的函数”是什么意思?

标签: php codeigniter codeigniter-3 crud grocery-crud


【解决方案1】:
<?php 
    defined('BASEPATH') OR exit('No direct script access allowed');


    function getCrud($table_name, $subject)
    {
          // some code
    }

     function oneToMany()
    {
        $CI =&get_instance();

        $crud = $CI->getCrud($table_name, $subject);
        return $crud ;
    }

试试这个

【讨论】:

  • 这不起作用。虽然这可以解决 OP 的全局变量与局部变量问题,但它仍然无法正常工作,因为 $CI-> 指的是一个不是的类方法。 OP仍然需要做一些阅读并明确他们打算做什么。示例中的 getCrud 函数是辅助函数,而不是类方法。所以它永远不会被这样调用。
  • 然后我们遇到了参数传递问题。 $table_name 和 $subject 来自哪里?
【解决方案2】:

可能以下应该可以工作

<?php 
defined('BASEPATH') OR exit('No direct script access allowed');


if(!function_exists('getCrud'))
{
    function getCrud($table_name, $subject)
    {
        // some code
    }
}

if(!function_exists('oneToMany'))
{
    function oneToMany()
    {
        $CI =&get_instance();

        $crud = getCrud($table_name, $subject);
        return $crud ;
    }
}

【讨论】:

    【解决方案3】:
    
        class Gc_script
        {
            public $CI;
            public function __construct()
            {
                $this->CI =& get_instance();
                $this->CI->config->item('base_url');
            }
    
            public function getGrocreyCrud($table_name, $read=null)
            {
                $crud = new grocery_Crud();
                $crud->set_table($table_name);
                $crud->set_subject(ucwords(str_replace('_', ' ', $table_name)));
    
                $crud->callback_delete(function ($primary_key) use ($table_name) {
                    return  $this->CI->db->update($table_name, array('flag'=>'0'), array('id'=>$primary_key));
                });
    
                return $crud;
            }
       }
    
    

    【讨论】:

      猜你喜欢
      • 2020-04-18
      • 1970-01-01
      • 2014-02-08
      • 2012-03-28
      • 2018-08-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-04-26
      相关资源
      最近更新 更多