2014-03-06 63 views
0

我有點困惑。我也很肯定這是以前的工作,但...CodeIgniter - 頁面變量undefined的視圖

這是一個非常基本的場景。頁面變量通過$ data在控制器中定義,但由於某些原因,它們在視圖中不可用。除非我失明,否則我看不出任何代碼有問題。

控制功能(全爲超高清晰度):

function login() 
{ 
    $data['page_title'] = 'Login title'; 
    $data['page_description'] = 'Login description'; 
    $data['page_keywords'] = 'login,keywords'; 
    $data['referer'] = $this->session->flashdata('referer'); 

    if($this->input->post('email',true) !== false) 
    { 
     $this->form_validation->set_rules('email', 'Email', 'trim|required|xss_clean'); 
     $this->form_validation->set_rules('password', 'Password', 'trim|required|xss_clean|callback_check_password'); 

     if($this->form_validation->run() == FALSE) 
     { 
      // Log failed attempt against IP address 
      $this->bruteforce->log_fail($this->input->ip_address() , $this->input->post('email',true)); 
     } 
     else 
     { 
      // Go to accounts home 
      if($this->input->post('referer') != '') 
      { 
       redirect($this->input->post('referer')); 
      } 
      else 
      { 
       redirect('dashboard'); 
      } 

     } 
    } 

    $this->load->view('login_view',$data); 
} 

所以在正常的網頁加載所有這些控制器並設置變量和加載視圖。

視圖(直到故障點)看起來像這樣:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0"> 

<!-- Meta --> 
<title><?php echo $page_title; ?></title> 

不過我剛:

Message: Undefined variable: page_title

任何想法? :■

編輯:

行,所以我只是發現了一些奇怪的。

我正在查看上述視圖作爲默認控制器,所以www.domain.com。但是,如果我直接查看它的URL,在這種情況下:www.domain.com/access/login/它工作正常。我不知道它爲什麼會有所作爲,但它似乎是事業的根源。但是在這兩種情況下,相同的控制器正在加載。所以我仍然很困惑。

編輯2:請參閱下面的答案。基本上錯誤的控制器正在加載,一個不應該存在的控制器仍然被一些重要功能引用。衛生署。

回答

0

嘗試使用

function login() 
{ 
    $data['page_title'] = 'Login title'; 
    $data['page_description'] = 'Login description'; 
    $data['page_keywords'] = 'login,keywords'; 
    $data['referer'] = $this->session->flashdata('referer'); 

    if($this->input->post('email')) 
    { 
     $this->form_validation->set_rules('email', 'Email', 'trim|required|xss_clean'); 
     $this->form_validation->set_rules('password', 'Password', 'trim|required|xss_clean|callback_check_password'); 
    } 
     if($this->form_validation->run() == FALSE) 
     { 
      // Log failed attempt against IP address 
      $this->bruteforce->log_fail($this->input->ip_address() , $this->input->post('email',true)); 

      $this->load->view('login_view',$data); 
     } 
     else 
     { 
      // Go to accounts home 
      if($this->input->post('referer') != '') 
      { 
       redirect($this->input->post('referer')); 
      } 
      else 
      { 
       redirect('dashboard'); 
      } 

     } 

} 
+0

不,不,恐怕不是這樣。請記住,以上是應用程序其餘部分的工作方式,並且很好(我確信幾星期前它沒有任何變化就很好),所以我懷疑它比這更惡毒,除非我可以看不到樹木。 –

+0

剛剛看到你的編輯並嘗試過,沒有改變。怪怪的? –

+0

嘗試在$ data後面加載您的視圖 –

0

行,所以我不知道發生了什麼依然在進行的100%,但我發現了問題的根源。

default_controllerroutes.php文件設置爲'login',而不是'access/login'。同樣,我的無線控制器上的index()功能轉發給'login',而不是'access/login'。真正使我困惑的是爲什麼頁面加載完畢。由於技術上'login'本身應該肯定會生成一個404(如果不是,那麼爲什麼變量不可用)。所以還是有點困惑,但至少問題解決了。爲什麼這只是現在纔出現,我也很困惑。

編輯:我是個白癡。我之前在項目中留下了一個「登錄」控制器。所以仍然不確定爲什麼這個問題沒有出現之前,但我至少知道爲什麼變量不工作,因爲一個完全不同的控制器正在加載!對不起浪費任何人時間。