Codeigniter 要在所有控制器内调用的公共函数

Codeigniter 要在所有控制器内调用的公共函数,codeigniter,codeigniter-3,Codeigniter,Codeigniter 3,是否可以使用codeigniter通过网站调用公共函数 Im已经使用codeigniter 3构建了一个CMS,它具有消息传递选项。在网站的标题上,我显示了未读邮件的数量 目前,我已将以下代码包含到所有模型中 function get_unread_count($id) { $this->db->where('to',$id); $this->db->where('read',0); $x = $this-&g

是否可以使用codeigniter通过网站调用公共函数

Im已经使用codeigniter 3构建了一个CMS,它具有消息传递选项。在网站的标题上,我显示了未读邮件的数量

目前,我已将以下代码包含到所有模型中

function get_unread_count($id)
    {

        $this->db->where('to',$id);
        $this->db->where('read',0);

        $x =  $this->db->get('messages');

        return $x->num_rows();

    }
我在所有控制器中调用它

有没有简化的方法?

使用会话变量(CI_会话)在每个会话中存储一次数据,因此您可以参考:

$this->session->userdata(your_msg_number)
直接进入视图,并委派一次会话获取消息编号。此外,通过手动设置数据将更新页面刷新上的值,前提是:

$this->session->set_userdata('your_msg_number_variable_name', msg_number)

如果您喜欢AJAX,您可以设置一个javascript指向一个控制器,该控制器通过JSON提供消息编号……

建立在Luciano所说的基础上-在每个页面上,您都必须通过会话检查或类似检查来确认用户是谁。因此,您可以同时更新新页面会话中的消息计数。这样,您就不必从每个控制器调用消息计数函数,它只是用户验证过程的一部分


还需要记住的是,不只是验证用户,您可以返回用户记录(对象或数组),以不同的方式使用,如用于名称等。换句话说,您不必总是编写内容并从会话中检索它们。最后考虑为登录用户创建一个单独的模板。这有助于保持事物的分离

助手函数在整个项目中都可用您可以直接在任何控制器中调用助手函数

在helper目录中创建一个文件application/helper/common_helper.php,并将函数放在该文件中

现在在routes.php中为自动加载配置助手名称:
$autoload['helper']=array('common_helper')

现在,您可以在所有控制器中调用helper函数而不使用对象,例如get_unread_count($id)

请注意:
$this->db
对象在helper中不可用,因此您需要创建codeigniter实例并使用:

$ci =& get_instance();
$ci->db->query();
就像上面设置的自动加载方法一样。 把你的函数放在这个模型下面的代码行

class Mdl_common extends CI_Model 
{
  function get_unread_count($id)
  {

    $this->db->where('to',$id);
    $this->db->where('read',0);

    $x =  $this->db->get('messages');

    return $x->num_rows();
  }
}
$this->mdl_common->get_unread_count($id); // i don't know what id you were passing 
并在头文件中调用此函数,如下代码行所示

class Mdl_common extends CI_Model 
{
  function get_unread_count($id)
  {

    $this->db->where('to',$id);
    $this->db->where('read',0);

    $x =  $this->db->get('messages');

    return $x->num_rows();
  }
}
$this->mdl_common->get_unread_count($id); // i don't know what id you were passing 

但是,像这样尝试,希望流将帮助您

嘿,它的应用程序/config/autoload-而不是路由文件。除此之外,我几乎提出了与你发布的内容类似的建议——但我认为卢西亚诺的建议实际上要好得多——特别是当你将其与你已经必须检查会话以验证用户的事实结合起来时。很抱歉,我只是错过了这一点