codeigniter - как вызвать вспомогательный метод только в контроллере и методе по умолчанию - PullRequest
0 голосов
/ 13 октября 2018

Я создал помощник для сохранения 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);
  }

Когда я вызываюметод, подобный saveVisit();, который был создан в моем помощнике , все в порядке и вызывается там, где я написал!

Но когда я вызываю этот метод из $route['default_controller'] = 'display/home';, этот метод будет вызываться из всех методов во всех моих контроллерах !!!

Я хочу назвать этот метод только домашней страницей, а не всеми контроллерами / методами !

Эта проблема касается только моего $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 для проверки и вызова по умолчанию контроллер , функция вызывается один раз НО выполняется дважды !

тест метод код в помощнике:

 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 голосов
/ 14 октября 2018

Вместо вызова функции test() для каждой функции в классе Display, вызовите ее внутри __construct()

<?php

class Display extends CI_Controller {

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

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

    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...