2012-02-11 98 views
8

我可以在哪裏放置我的「全局」函數,它將檢查用戶是否登錄?CodeIgniter全局函數

因爲我想做的事情是這樣的:用戶只能在函數isLogged()返回TRUE時才能瀏覽一些頁面,我必須在某些視圖中使用它,這就是爲什麼它應該是一個「全局」函數,我可以從任何地方訪問。

這可能嗎?或者有更好的解決方案呢?

回答

10

你應該把它放到一個庫中,並自動加載庫。當您需要在視圖中使用「logged_in」標誌時,將其從控制器傳入。例如:


application/libraries/Auth.php

<?php defined('BASEPATH') OR exit('No direct script access allowed'); 

class Auth 
{ 

    public function is_logged_in() 
    { 
     // Change this to your actual "am I logged in?" logic 
     return $_SESSION['logged_in']; 
    } 

} 

application/config/autoload.php

... 
$autoload['libraries'] = array(
    ... 
    'auth', 
    ... 
} 

`應用/控制器/的welcome.php

<?php ... 

public function index() 
{ 
    $view_data = array 
    (
     'logged_in' => $this->Auth->logged_in() 
    ); 
    $this->load->view('my_view', $view_data); 
} 

application/views/my_view.php

<? echo $logged_in ? 'Welcome back!' : 'Go login!' ?> 
+0

應在'$ this-> Auth-> logged_in()'中使用'Auth'小寫? – dangel 2013-07-19 21:36:38

+0

什麼是<?php定義('BASEPATH')或exit('不允許直接腳本訪問');爲什麼? – 2014-05-11 15:39:10

+1

@SvenB對於大多數「較舊」的框架(CI,Kohana 2.x等)而言,web根目錄包含了所有的應用程序文件(控制器等),因此技術上可以直接進入'/ application/libraries/Auth .php'並讓它加載該文件。 'BASEPATH'常量在'index.php'文件中定義,所以除非你的請求正在通過該文件(例如,一個正常的站點請求),否則該行會阻止你訪問該文件。另見:http://en.wikipedia.org/wiki/Defence_in_depth – Joe 2014-05-12 09:15:09

5

您是否使用了認證庫?如果沒有,我會建議一個。 他們來這樣的功能。

坦克驗證例如有:is_logged_in(),這正是你想要的!

http://www.konyukhov.com/soft/tank_auth/

欲瞭解更多信息有關的庫使用,你應該看看這個答案,比較所有庫:如果你不想驗證庫由喬的建議,你可以做 https://stackoverflow.com/a/476902/576223

+0

我剛剛提出了** Tank Auth **,大多數人都試圖用框架重新發明輪子,當已經有很棒的庫周圍。 – Jakub 2012-02-11 01:59:18

+0

我建議的**是一個認證庫,只是一個非常簡潔的例子,讓他知道它是如何工作的,以及如何控制應用程序流程:P – Joe 2012-02-11 01:59:43

+0

我知道,我只是寫我的答案作爲你的答案出現了,所以我編輯了它。 :) – bottleboot 2012-02-11 02:01:57

0

您可以使用MY_controller以及網站每個頁面上所需的全部功能。並從中繼承所有的控制器。 read this oficial wiki