我对Codeigniter很新,所以我可能会以错误的方式解决这个问题。在我的模板的标题中,我有一个显示帐户信息的地点或要登录的消息。
为了使其正常工作,每个控制器显然需要具有相同的代码。为避免这种情况,用户指南说我应该能够扩展CI_Controller并自动包含该代码。但是,这对我不起作用。这就是我所拥有的。
应用/核心/ MY_Controller.php:
<?php
class MY_Controller extends CI_Controller {
function __construct()
{
parent::__construct();
$this->load->database();
$this->load->model('user_model');
if ( $this->user_model->validateToken ( $this->input->cookie('session_token', TRUE) ) )
{
$data['login_info'] = 'Logged in as '. $this->user_model->getUsernameAsLink($this->input->cookie('session_token', TRUE)).'<BR />
<a href="/dashboard">Control Panel</a>';
}
else
{
$data['login_info'] = 'You are not logged in<BR />
<a href="/account/login">Log In</a>';
}
}
}
?>
它引用的模型:
<?php
class User_model extends CI_Model {
public function __construct()
{
}
public function validateToken($token)
{
// Get token from database to check against cookie
$query = $this->db->query('SELECT `login_token` FROM `Users` WHERE `login_token` = "'.$token.'"');
// Match Found?
$rowCount = $query->num_rows();
if ( $rowCount == 1 ) {
return true;
} else {
return false;
}
}
public function getUsernameAsLink ( $token )
{
// Get token from database to check against cookie
$query = $this->db->query('SELECT `username` FROM `Users` WHERE `login_token` = "'.$token.'"');
foreach( $query->result() as $row ) {
$username = $row->username;
}
$returnString = '<a href="/profile/'. $username .'">'.ucfirst ( $username ).'</a>';
return $returnString;
}
}
?>
我收到通知错误,说$ data ['login_info']值不存在。有没有什么我留下来让它不能处理扩展到MY_Controller?
答案 0 :(得分:1)
要使$data
在其他控制器中可用,您需要使其可用。尝试将其设置为$this->data
并在其他控制器中使用相同的东西。