【发布时间】:2012-02-11 01:45:54
【问题描述】:
我在哪里可以放置我的“全局”函数,它会检查用户是否登录?
因为我想做这样的事情:只有当函数isLogged() 返回 TRUE 时,用户才能浏览某些页面,并且我必须在某些视图中使用它,这就是为什么它应该是一个“全局”函数,我可以从任何地方访问。
这可能吗?或者有什么更好的解决方案?
【问题讨论】:
标签: php function codeigniter
我在哪里可以放置我的“全局”函数,它会检查用户是否登录?
因为我想做这样的事情:只有当函数isLogged() 返回 TRUE 时,用户才能浏览某些页面,并且我必须在某些视图中使用它,这就是为什么它应该是一个“全局”函数,我可以从任何地方访问。
这可能吗?或者有什么更好的解决方案?
【问题讨论】:
标签: php function codeigniter
您可能应该将其放入库中,并自动加载库。当您需要在视图中使用“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',
...
}
`application/controllers/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!' ?>
【讨论】:
Auth 在$this->Auth->logged_in() 中应该小写吗?
/application/libraries/Auth.php 并让它只加载那个文件。 BASEPATH 常量在index.php 文件中定义,因此除非您的请求通过该文件(例如,正常的站点请求),否则该行会阻止您访问该文件。另见:en.wikipedia.org/wiki/Defence_in_depth
您是否在使用身份验证库?如果没有,我会建议一个。 它们具有类似的功能。
Tank Auth 例如有:is_logged_in(),这正是你想要的!
http://www.konyukhov.com/soft/tank_auth/
有关使用哪个库的更多信息,您应该查看比较所有库的这个答案: https://stackoverflow.com/a/476902/576223
如果您不需要身份验证库,可以按照 Joe 的建议进行操作
【讨论】:
is_unique[table.field] 但是 Tank Auth 还没有使用它,但它真的很棒图书馆,CI 是我正在学习的第一个框架,我不知道有像这样的伟大图书馆。好吧,我会使用 Joe 的建议,然后我会从 Tank Auth 库中复制一些好东西 :)。谢谢!
您可以将 MY_controller 与您网站的每个页面所需的所有功能一起使用。并从中继承所有控制器。 read this oficial wiki
【讨论】: