Php Codeigniter在每个控制器中执行代码

Php Codeigniter在每个控制器中执行代码,php,codeigniter,controller,Php,Codeigniter,Controller,我对Codeigniter还比较陌生,所以我可能会走错方向。在模板的标题中,我有一个显示帐户信息或要登录的消息的位置 为了使其正常工作,每个控制器显然需要有相同的代码。为了避免这种情况,用户指南说我应该能够扩展CI_控制器,并且它会自动包含该代码。然而,这对我不起作用。这是我得到的 application/core/MY_Controller.php: <?php class MY_Controller extends CI_Controller { function __construc

我对Codeigniter还比较陌生,所以我可能会走错方向。在模板的标题中,我有一个显示帐户信息或要登录的消息的位置

为了使其正常工作,每个控制器显然需要有相同的代码。为了避免这种情况,用户指南说我应该能够扩展CI_控制器,并且它会自动包含该代码。然而,这对我不起作用。这是我得到的

application/core/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
在其他控制器中可用,您需要使其可用。尝试将其设置为
$this->data
,并在其他控制器中使用相同的东西。

您是否让所有其他控制器扩展
MY\u Controller
而不是
CI\u Controller
?是的,我的所有控制器当前都在扩展MY\u Controller。它在哪里说它不存在?在您包含的代码中,没有任何地方使用它,只有set。@CWSpear在Codeigniter中,变量在视图中的$data中由其键调用。我忽略了这一点,因为它很简单,在调用视图之前,先打印($data)
。或者更好的方法是,如果您像我的回答中那样执行,
print\r($this->data)
。我将控制器中的所有$data引用更改为$this->data并将其传递给我的视图,但它仍然不会将数据从我的\u控制器传递给下一个控制器。还有什么需要做的吗?在
MY_Controller
和您的其他控制器中都将其用作
$this->data
吗?从现在开始在所有控制器中使用$this->data。谢谢