2012-02-11 100 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