gpt4 book ai didi

php - 将变量从 MY_Controller 传递到 View

转载 作者:搜寻专家 更新时间:2023-10-31 20:47:50 24 4
gpt4 key购买 nike

在我的网站上,我有一个在每个页面上都可见的“登录提示”。我使用的是模板系统,所以这个登录提示出现在每个页面的标题中。

当用户登录时,它应该显示他们的用户名和注销链接。当他们未登录时,会显示登录或注册链接。

我在 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( View )中我有:

<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>

问题出在我的 Controller 上。这是 ucp.php 的构造函数,它扩展了 MY_Controller:

public $data;

function __construct()
{
parent::__construct();
$data['login_prompt'] = $this->data['login_prompt'];
}

我希望 $data['login_prompt'] 在我的 Controller 的每个方法中可用,以便它可以传递给 View 。但是,打印 $data['login_prompt'] 会出现 'undefined index' 错误,结果是默认的“登录或注册” header.php 中定义的消息始终可见。

ucp.php 中的典型方法如下:

function index()
{
$this->template->build("ucp/ucp_view", $data);
}

如您所见,$data 数组应该传递给 View 。如果我要在方法本身而不是构造函数中定义 $data['login_prompt'] 这样:

function index()
{
$data['login_prompt'] = $this->data['login_prompt'];
$this->template->build("ucp/ucp_view", $data);
}

登录提示变为正确的登录消息。但是,我不想将这一行添加到我的应用程序中每个 Controller 的每个方法中。

我发现的一个类似问题涉及简单地将传递给 View 的 $data 数组更改为 $this->data,概述 here .这行得通,但破坏了我的应用程序的其他几个部分。

我觉得这个错误非常明显。我做错了什么?

最佳答案

你有几个选择

您可以在 MY_Controller 上使用 $this->data 属性,然后确保将 $this->data 传递给所有你的看法

// MY_Controller
public $data;

public function __construct()
{
if($this->is_logged_in())
{
$this->username = $this->session->userdata('username');
$this->data['login_prompt'] = "Hi, " . $this->username . " " . anchor("account/logout", "Logout");
}
}

然后在我们的 Controller 中..

// An example controller. By extending MY_Controller 
// We have the data property available
UcpController extends MY_Controller
{
public function __construct()
{
parent::__construct();
}

public function index()
{
$this->data['Some extra variable'] = 'Foo';
// Notice we are giving $this->data rather than $data...
// this means we will have our login prompt included
// as it is set by the parent class
$this->template->build("ucp/ucp_view", $this->data);
}
}

或者,您可以在 MY_Controller 中设置一个全局数组,然后使用 load->vars 方法使该数组可用于您的所有 View

// MY_Controller
public $global_data;

public function __construct()
{
if($this->is_logged_in())
{
$this->username = $this->session->userdata('username');
$this->global_data['login_prompt'] = "Hi, " . $this->username . " " . anchor("account/logout", "Logout");

$this->load->vars($this->global_data);
}
}

关于php - 将变量从 MY_Controller 传递到 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11384061/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com