Codeigniter-如何仅在默认控制器和方法中调用辅助方法

时间:2018-10-13 14:42:45

标签: php codeigniter helper

我创建了一个帮助程序,用于将user_agent保存在db中,并使用方法saveVisit();

visit_helper:

  function saveVisit($visitable_type='',$visitable_id='')
  {
    $CI =& get_instance();
    $CI->load->library('user_agent');
    $ip = $CI->input->ip_address();

    $userId = $CI->session->userdata('userId');
    if (!isset($userId)) {
      $userId = 0;
    }
    if ($CI->agent->is_mobile()) {
      $mobile=$CI->agent->mobile();
    }else {
      $mobile=0;
    }
    $data = array(
      'ip'=>$ip,
      'visitable_id'=>$visitable_id,
      'visitable_type'=>$visitable_type,
      'user_id'=>$userId,
      'created_at'=>dbtime(),
      'browser'=>$CI->agent->browser(),
      'version'=>$CI->agent->version(),
      'platform'=>$CI->agent->platform(),
      'mobile'=>$mobile,
      'referral'=>$CI->agent->referrer(),
    );
    $CI->db->insert('visits',$data);
  }

当我调用在我的 helper 中创建的saveVisit();之类的方法时,一切正常,并且调用了我编写的位置!

但是当我从$route['default_controller'] = 'display/home';调用此方法时,该方法将从我所有控制器 !!!

中的所有方法中调用

我只想将此方法称为主页,而不是全部 controllers / methods

此问题仅适用于我的$route['default_controller'] = 'display/home';

我的控制器的代码:

class Display extends CI_Controller {
    public function __construct()
  {
        parent::__construct();
  }
    public function home()
    {
        // some codes here 
        saveVisit('home');
    }
}

我只希望saveVisit();仅在主页中被调用

已编辑:

我在 helper 中创建了一个新功能进行测试并在默认的 controller 中调用,该功能一旦 BUT 运行两次< / strong>!

在助手中

测试方法代码:

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

      if ($CI->session->userdata('visit')!=null) {
        $plus = $CI->session->userdata('visit');
        $CI->session->set_userdata('visit',$plus+1);
        echo $CI->session->userdata('visit');
      }else {
        $CI->session->set_userdata('visit',1);
      }

当我在默认test();内调用Controller时,每次刷新页面的结果是(其他控制器为“正常”):

2
4
6
8
10
12
14
.
.
. 

为什么会这样?

编辑3:

当我在默认控制器中调用辅助功能时,它将运行两次,并从其他控制器运行一次!问题是我没有在其他控制器

中调用功能

1 个答案:

答案 0 :(得分:0)

而不是对{strong> test() 类中的每个函数调用Display函数,而是在__construct()

内部调用
<?php

class Display extends CI_Controller {

    public function __construct(){
        parent::__construct();
        test();
    }

    public function home(){
        // some codes here 
        saveVisit('home');

    }
}