我对codeigniter框架相对较新,到目前为止,我的调整很好。我很好奇是否有实现最终结果的捷径。嗯,这就是手头的问题。
我正在使用这段代码$data['logged_in'] = $this->verify_min_level(1);
来验证用户是否已登录。我想避免的是在控制器中的每个其他方法中使用此代码,而是将其声明一次并且全局适用到控制器中的所有方法。
我尝试过使用protected $data['logged_in'] = $this->verify_min_level(1);
而没有任何运气。我哪里出错了,我该怎么纠正呢?提前谢谢。
答案 0 :(得分:1)
在类中声明一个变量并访问它......
class Class_name extends CI_Controller
{
protected $logged_in;
public function __construct()
{
$this->logged_in = $this->verify_min_level(1); // assign the value to variable
}
public function another_method()
{
echo $this->logged_in; // access the defined variable
}
}
答案 1 :(得分:0)
在helpers
目录中创建一个帮助文件。并定义一个检查用户登录的功能。喜欢
if( ! function_exists('is_logged_in') ) {
function is_logged_in() {
$CI =& get_instance();
// Now you can load any module here with $CI
// Check user and return appropriate data
}
}
现在自动加载此帮助程序,以便您不需要每次都加载它,转到config/autoload.php
并导航$autoload['helper']
数组,现在在此处加载此帮助程序类。
完成所有操作后,is_logged_in()
controller
,model
和view
可以使用{{1}}功能。
答案 2 :(得分:0)
我认为你应该使用库来实现它。
创建库,知道如何使用会话和/或cookie,数据库进行用户授权,知道验证用户的级别。
创建文件" Auth.php"在" system \ application \ libraries" 。目录
class CI_Auth {
var $obj;
/**
* Constructor
*
* @access public
*/
function CI_Auth()
{
/* here you get application's instance
you can use it then as $this->obj->load->model('usermodel');
$this->obj->usermodel->login($name, $pass);
*/
$this->obj =& get_instance();
/* init code using sessions, cookies, database */
}
function getUserId() {
/* your code */
return $user_id;
}
function getAuthLevel() {
if ($this->getUserId()) {
/* Your code */
return $level;
}
return false;
}
}
然后在system \ application \ config \ autoload.php中启用此库:
$autoload['libraries'] = array('database', 'session', 'auth');
现在您可以在任何控制器,模型或视图中使用它:
if (!$this->auth->getUserId())
{
/* MUST LOG IN*/
}
if (!$this->auth->getAuthLevel() < 2)
{
/* NO PERMISSIONS */
}