在我的网站上,我有一个在每个页面上都可见的“登录提示”。我正在使用模板系统,因此此登录提示出现在每个页面的标题中。
当用户登录时,它应该显示他们的用户名和注销链接。当他们未登录时,将显示登录或注册的链接。
我在 MY_Controller 中有一个函数,它检查用户是否在每个页面加载时都登录,这工作正常:
if($this->is_logged_in()) {
$this->username = $this->session->userdata('username');
$data['login_prompt'] = "Hi, " . $this->username . " " . anchor("account/logout", "Logout");
}
在我的 header.php (视图)中,我有:
<div id="login-prompt" class="transparent">
<?php
if (!isset($login_prompt)) $login_prompt = anchor("account/login", "Login") . " or " . anchor("account/register", "register");
echo $login_prompt;
?>
</div>
问题出在我的控制器上。这是 ucp.php 的构造函数,它扩展了 MY_Controller:
public $data;
function __construct()
{
parent::__construct();
$data['login_prompt'] = $this->data['login_prompt'];
}
我希望$data['login_prompt']
在我的控制器的每个方法中都可用,以便可以将其传递给视图。但是,打印$data['login_prompt']
会出错,'undefined index'
因此在 header.php 中定义的默认“登录或注册”消息始终可见。
ucp.php 中的一个典型方法如下:
function index()
{
$this->template->build("ucp/ucp_view", $data);
}
如您所见,$data
数组应该传递给视图。如果我要$data['login_prompt']
在方法本身而不是构造函数中定义:
function index()
{
$data['login_prompt'] = $this->data['login_prompt'];
$this->template->build("ucp/ucp_view", $data);
}
登录提示更改为正确的已登录消息。但是,我不想将此行添加到我的应用程序中每个控制器的每个方法中。
我发现的一个类似问题涉及简单地将$data
传递给视图的数组更改为,此处$this->data
概述。这可行,但会破坏我的应用程序的其他几个部分。
我觉得这个错误非常明显。我究竟做错了什么?