2015-04-05 84 views
0

我對codeigniter很陌生,我正在構建一些示例工具來了解我的解決方法。我已經在網上關注了一些基本的教程,現在我要走自己的路了。在codeigniter中訪問來自控制器的發佈變量

我有下面的代碼,我試圖解決,如果用戶存在之前註冊他們。我也無法知道如何告訴我的觀點,即如果用戶已經存在錯誤,我會在哪裏傳回數據?

我得到的錯誤是:

致命錯誤:使用$這在不在線的/Users/Tom/www/crm/application/helpers/site_helper.php對象上下文18

控制器/ users.php

public function register() 
    { 
     $this->load->helper('form'); 
     $this->load->library('form_validation'); 

     $data['title'] = 'Create a new user'; 

     $this->form_validation->set_rules('firstname', 'First Name', 'required'); 
     $this->form_validation->set_rules('surname', 'Surname', 'required'); 

     if ($this->form_validation->run() === FALSE) 
     { 
      $this->load->view('templates/header', $data); 
      $this->load->view('users/register'); 
      $this->load->view('templates/footer'); 

     } 
     else 
     { 
      if(c_userexists($this->input->post('email'))){ 
       $this->load->view('templates/header', $data); 
       $this->load->view('users/register'); 
       $this->load->view('templates/footer'); 
      } else { 
       $this->users_model->set_register(); 
       $this->load->view('users/success'); 
      } 
     } 
    } 

助手/ site_helper.php

if(!function_exists('c_userexists')) 
    { 
     function c_userexists($value) 
     { 
      $this->db->select('count(*) as user_count'); 
      $this->db->from('users'); 
      $this->db->where('email', $userId); 

      $query = $this->db->get(); 
      if($query > 0){ 
       return true; 
      } else { 
       return false; 
      } 
     } 
    } 

模型/ Users_model.php

public function set_register() 
    { 
     $this->load->helper('url'); 

     $data = array(
      'firstname' => $this->input->post('firstname'), 
      'surname' => $this->input->post('surname'), 
      'email' => $this->input->post('email'), 
      'password' => c_passencode($this->input->post('email')) 
     ); 

     return $this->db->insert('users', $data); 
    } 
+0

看看這篇文章幫助:http://stackoverflow.com/questions/ 6234159/codeigniter-cant-access-this-within-function-in-view這是一個視圖,而不是幫助器,但同樣的問題。 – 2015-04-05 18:38:10

回答

0

$this是到控制器對象實例的引用。你不能直接在助手功能中引用$this。您可以使用幫助函數get_instance來訪問當前正在運行的控制器實例的實例。

爲了使長話短說,更新您的site_helper:

if(!function_exists('c_userexists')) 
{ 
    function c_userexists($value) 
    { 
     $CI =& get_instance(); 
     $CI->db->select('count(*) as user_count'); 
     $CI->db->from('users'); 
     $CI->db->where('email', $userId); 

     $query = $CI->db->get(); 
     if($query > 0){ 
      return true; 
     } else { 
      return false; 
     } 
    } 
} 

欲瞭解更多信息,請訪問: http://www.codeigniter.com/userguide3/general/ancillary_classes.html?highlight=get_instance#get_instance