php视图变量输出,PHP-将变量从MY_Controller传递到视图

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

用户登录后,应显示其用户名和注销链接.未登录时,将显示登录或注册的链接.

我在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(视图)中,我有:

if (!isset($login_prompt)) $login_prompt = anchor("account/login", "Login") . " or " . anchor("account/register", "register");

echo $login_prompt;

?>

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

public $data;

function __construct()

{

parent::__construct();

$data['login_prompt'] = $this->data['login_prompt'];

}

我希望$data [‘login_prompt’]在控制器的每个方法中都可用,以便可以将其传递到视图.但是,打印$data [‘login_prompt’]会给出“未定义的索引”错误,结果,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数组更改为概述为here的$this-> data.此方法有效,但破坏了应用程序的其他部分.

我觉得错误很明显.我究竟做错了什么?

解决方法:

您有几种选择

您可以在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");

}

}

然后在我们的控制器中.

// 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方法使该数组可用于所有视图

// 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);

}

}

标签:variables,codeigniter,constructor,php

来源: https://codeday.me/bug/20191201/2078208.html

参与评论 您还未登录,请先 登录 后发表或查看评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
©️2022 CSDN 皮肤主题:深蓝海洋 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值