2017-07-19 101 views
1

在我的頭鑑於我寫了這個代碼:如何在codeigniter中將視圖重定向到控制器?

<?php 

    if($this->session->userdata('logged_in')) { 
    $query = $this->db->get_where('instructors', array('id' => $this->session->userdata('id'))); 

    $insdatacheck = $query->row_array(); 

    if($insdatacheck['name'] == '') { 
     redirect(base_url().'user/continueregistration'); 
    } else { ?> 
     <script type="text/javascript">alert('test');</script> 
     <?php 
    } 

    } 

?> 

不過,這並不重定向到以下頁面。但是,如果我在控制器中編寫它,它可以正常工作。我把它寫在標題視圖中,因爲我想在輸入用戶的每個頁面中檢查它。我該如何改進它並以適當的方式書寫?在此先感謝

+0

正確的做法是把這個控制器。通常從控制器調用一個視圖,所以你可以隨時使用控制器邏輯 – Vickel

+0

,但是如何以這種方式放置這個控制器,它必須在輸入用戶的每個頁面中檢查這個代碼? –

+0

查看Muhammad Usman的回答 – Vickel

回答

1

我認爲,而不是你的頭,你應該把你的檢查在你的控制器的構造函數。

class Test extends CI_Controller { 

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

    // if not logged-in redirect to login page 
    if ($this->session->userdata('logged_in') == false) { 
     redirect('login'); // where you want to redirect 
    } 
    } 
} 
+0

但是我想讓這段代碼在每一頁上都能正常工作。我應該寫它並把這個代碼放到每個函數中嗎? –

+0

如果您在構造函數中進行檢查,則必須登錄才能訪問該控制器的所有功能。 –

+0

我很抱歉打擾你,但我沒有得到它:(你可以顯示請解釋清楚嗎? –

0

另一種選擇是創建一個基礎控制器。將函數放在基本控制器中,然後繼承它。

要在CodeIgniter中實現此目的,請在應用程序的libraries文件夾中創建一個名爲MY_Controller.php的文件。

class MY_Controller extends Controller 
{ 
    public function __construct() 
    { 
     parent::__construct(); 
    } 

    public function is_logged_in() 
    { 
     $user = $this->session->userdata('user_data'); 
     return isset($user); 
    } 
} 

然後讓你的控制器從這個基礎控制器繼承。

class X extends MY_Controller 
{ 
    public function __construct() 
    { 
     parent::__construct(); 
    } 

    public function do_something() 
    { 
     if ($this->is_logged_in()) 
     { 
      // User is logged in. Do something. 
     } 
    } 
} 
0
First create session in the controller only, 

Then we access session in any page, 

$this->load->library('session'); 
$user=$this->session->userdata('logged_in'); 

if (!isset($user)) { 
redirect(base_url().'user/continueregistration'); 
    } 
else { 
    <script type="text/javascript">alert('test');</script> 
} 
相關問題