我创建了一个帮助程序,用于将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:
当我在默认控制器中调用辅助功能时,它将运行两次,并从其他控制器运行一次!问题是我没有在其他控制器
中调用功能答案 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');
}
}