[英]Codeigniter Login Logout button
我正在使用codeigniter框架制作第一個網站。 我已經用一種方法來檢查用戶類,從而使其成為用戶類:
public function is_logged_in()
{
$this->load->library('session');
$loggedin = $this->session->userdata('logged_in');
if ($loggedin)
{
return TRUE;
}
else
{
return FALSE;
}
}
現在我的標題中有一個菜單,帶有一個按鈕,需要根據登錄狀態進行更改。 如果用戶未登錄,我想顯示一個登錄按鈕,否則要顯示一個注銷按鈕(當然帶有正確的鏈接)。 我認為在MVC中應該只有html,只有php才需要。 我應該在哪里放置檢查以查看是否顯示“登錄”或“注銷”按鈕,我應該在調用標題的每個控制器中執行以下操作:
$data['menubutton']= $this->getbutton();//something to get the button
$this->load->view('templates/header', $data);
如果我要那樣做,我需要將其添加到每個控制器中,是否應該在視圖中進行檢查,或者是否有另一個簡單的解決方案。
簡而言之,根據登錄狀態創建正確的菜單按鈕的最佳方法/位置是什么? (登錄或注銷按鈕)
簡而言之,您可以在視圖頁面中進行操作。
以更高級的方式:您可以為來賓用戶和登錄用戶使用兩種不同的布局。 它們之間可能還有更多區別,例如查看用戶信息(用戶名,問候語,個人資料鏈接等)。
注意:查看用戶是否已登錄不是查看的一部分。 但是視圖可以對單個條件進行檢查
您可以通過在應用程序/核心中放置一個名為MY_Controller.php的文件來擴展控制器。
<?php
class MY_Controller extends CI_Controller {
public function __construct()
{
parent::__construct();
// Perform the login check here
}
}
?>
在通常的控制器中,您將擴展MY_Controller而不是CI_Controller
class User extends MY_Controller { }
由於您現在擴展了My_Controller而不是CI_Controller,因此可以將代碼放在MY_Controller __construct()
方法中,以在每次控制器負載時執行,這是放置諸如在每個控制器中執行但不希望執行的登錄檢查之類的理想場所。復制代碼。
如果要實現這一點,我將只擁有一個用戶對象或布爾值,就可以在視圖中進行檢查,並且只需執行if語句即可顯示正確的按鈕。 我將按鈕代碼保留在視圖中。
有關擴展核心類的更多信息,請參見CodeIgniters文檔: http : //ellislab.com/codeigniter/user-guide/general/core_classes.html
可以在以下位置找到有關擴展核心控制器的更友好描述: http : //www.gregaker.net/2011/mar/18/extending-codeigniters-controller/
給出了我不喜歡的解決方案,因此在本主題的幫助下我自己做了一個
我創建了一個像
<?php defined('BASEPATH') OR exit('No direct script access allowed');
class Auth
{
public function get_menu($data)
{
$CI =& get_instance();
if ($this->is_logged_in())
{
return ($CI->load->view('templates/headerlogged', $data));
}
else
{
return ($CI->load->view('templates/header', $data));
}
}
public function is_logged_in()
{
$CI =& get_instance();
$CI->load->library('session');
$loggedin = $CI->session->userdata('logged_in');
if ($loggedin)
{
return TRUE;
}
else
{
return FALSE;
}
}
}
在我的/application/config/autoload.php中,我添加
$autoload['libraries'] = array('auth',);
確保我可以始終在控制器中使用代碼,而不必手動加載它們
在我的控制器中,我現在可以使用
$this->auth->get_menu($data);
代替
this->load->view('templates/header', $data);
而且我總是得到正確的菜單。
我知道auth這個名字很奇怪,但是您可以根據自己的喜好更改它。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.