2013-01-07 59 views
6

एक क्लाइंट की आवश्यकता है कि सभी GET/POST अनुरोध लॉग इन हो जाएं और उनके आवेदन के लिए 90 दिनों के लिए संग्रहीत किया जाए। मैंने एक हुक लिखा है जो कुछ GETS/POSTS रिकॉर्ड करता है लेकिन मेरे अपेक्षा से कम डेटा है। उदाहरण के लिए, फॉर्म डेटा जमा करते समय, प्रविष्टियों को लॉग में नहीं लगते हैं। क्या किसी ने ऐसा कुछ लिखा है जो काम करता है?कोडिग्निटर - लॉग इन करने के लिए हुक/पोस्ट अनुरोध

यहाँ मेरी संस्करण इस प्रकार दूर है:

class Logging { 

    function __construct() { 
     $this->CI =& get_instance(); 
    } 

    function index() { 
     $this->CI->load->model('Logging_m'); 
     $this->CI->load->model('Portal_m'); 

     //get POST and GET values for LOGGING   
     $post = trim(print_r($this->CI->input->post(), TRUE)); 
     $get = trim(print_r($this->CI->input->get(), TRUE)); 

     $this->CI->Logging_m->logPageView(array(
       'portal_id' => $this->CI->Portal_m->getPortalId(), 
       'user_id' => (!$this->CI->User_m->getUserId() ? NULL : $this->CI->User_m->getUserId()), 
       'domain' => $_SERVER["SERVER_NAME"], 
       'page' => $_SERVER["REQUEST_URI"], 
       'post' => $post, 
       'get' => $get, 
       'ip' => $this->CI->input->ip_address(), 
       'datetime' => date('Y-m-d H:i:s') 
     )); 
    } 

} 

यह डेटा एक मॉडल है जो इस तरह दिखता है 'Logging_m' कहा जाता है में संग्रहित है:

<?php 
class Logging_m extends CI_Model { 

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

    function logPageView($data) { 
    $this->db->insert('port_logging', $data); 
    } 

} 

/* End of file logging_m.php */ 
/* Location: ./application/models/logging_m.php */ 
+0

क्या आप अपना फॉर्म खो रहे फॉर्म को पोस्ट कर सकते हैं। –

+1

दिलचस्प सवाल +1। क्या आप अपने फॉर्म इनपुट का var_dump कर सकते हैं और उसी इनपुट के लिए लॉग के बगल में पोस्ट कर सकते हैं ताकि हम अंतर को स्पॉट कर सकें। – WebweaverD

+0

क्या आपके सभी सरणी मान आपके जैसा सेट किए जा रहे हैं, या क्या यह केवल GET/POST जानकारी है? साथ ही, मैं सिर्फ उत्सुक हूं, आप $ _POST सरणी वापस करने के लिए print_r का उपयोग क्यों कर रहे हैं जब यह-> इनपुट-> पोस्ट() पहले ही डेटा लौटा रहा है। आप डेटा को साफ नहीं कर रहे हैं, केवल इसे ट्रिम कर रहे हैं। यह सिर्फ अनावश्यक लगता है। –

उत्तर

10

पैट्रिक Savalle द्वारा mentionned के रूप में आप हुक का उपयोग करना चाहिए । post_controller_constructor हुक का उपयोग करें ताकि आप अन्य सभी सीआई सामग्री का उपयोग कर सकें।

1) ./application/config/config.php में $config['enable_hooks'] = TRUE

2) सेट ./application/config/hooks.php में निम्नलिखित हुक

$hook['post_controller_constructor'] = array(
    'class' => 'Http_request_logger', 
    'function' => 'log_all', 
    'filename' => 'http_request_logger.php', 
    'filepath' => 'hooks', 
    'params' => array() 
); 

3) जोड़ने फ़ाइल ./application/hooks/http_request_logger.php बनाएँ और उदाहरण के रूप में निम्न कोड जोड़ें।

if (!defined('BASEPATH')) 
    exit('No direct script access allowed'); 

class Http_request_logger { 

    public function log_all() { 
     $CI = & get_instance(); 
     log_message('info', 'GET --> ' . var_export($CI->input->get(null), true)); 
     log_message('info', 'POST --> ' . var_export($CI->input->post(null), true));     
     log_message('info', '$_SERVER -->' . var_export($_SERVER, true)); 
    } 

} 

मैं इसे परीक्षण किया है और यह (सुनिश्चित करें कि आप अपने कॉन्फ़िग फ़ाइल में सक्रिय लॉगिंग है) मेरे लिए काम करता है।

+0

क्या एक हुक फ़ाइल में $ CI को जनता के रूप में घोषित करना ठीक है? –

+0

@ VipinKr.Singh इसे फिर से देख रहे हैं मुझे इसे फ़ंक्शन के बाहर घोषित करने का कोई कारण नहीं दिख रहा है। मैंने उदाहरण संशोधित किया है। –

+0

जानकारी पृष्ठ में कुछ भी नहीं लिखा है और न ही आपके कोड से पृष्ठ बनाया गया है। :( –