如何定义控制器内部所有函数均可访问的$ data变量?

时间:2019-04-30 15:58:33

标签: codeigniter-3

如果可能,我想一次在$ data中定义一个值,然后可以在控制器的任何功能中访问这些值。目前,当我运行代码时,这些代码都无法访问。

为了澄清,当我在线搜索时,大多数答案都在说明如何全局定义整个应用程序的变量,我想指定仅在控制器中需要它。

Codeigniter 3 我的背景:我没有编码经验,但是我很想学习。

我所做的:

我试图在一开始将其添加到控制器中并使其公开

我试图将其添加到__construct函数中

<?php
defined('BASEPATH') OR exit('No direct script access allowed');

class Pages extends CI_Controller {

    public $data = [];
    public $footerScripts = [];

    public function __construct() {

        parent::__construct();

        //Authentication required for this controller
        if (!$this->ion_auth->logged_in())
        {
            //if not loggedin, reroute to the login page
            redirect('Auth/login', 'refresh');
        }

        $this->load->helper('sys');
        $this->load->helper('array');

        //set global information this is then overwritten by the individual functions
        $this->data['pageTitle'] = 'Pages';
        $this->data['activeNav'] = 'pages';
        $this->data['controllerIcon'] = 'flaticon-interface-6';

    }

    public function index()
    {
        //index doesn't always exist, instead we use list
        redirect(base_url('backend/pages/list'));
    }

    public function list()
    {
        $data = [];

        $data['view'] = "backend/defaultTheme/pages/list";
        $this->load->view('backend/defaultTheme/master/master2.php', $data);
    }

}

所需结果:

我想声明控制器的名称,以便可以在所有视图上使用,除非其中一个函数想要覆盖它。

$this->data['pageTitle'] = 'Pages';

在视图中,我想:

echo $pageTitle;

无需在控制器的每个功能中声明它

1 个答案:

答案 0 :(得分:0)

您的示例已正确设置。

您已经定义了$ data属性(即所谓的$ data),以便您的类中的所有方法(函数)都可以访问该类,并且只能在此类中访问。

public $data = []; // $data property

看来您的清单方法有问题。 这是您目前对我所包含的评论的看法...

public function list()
{
    $data = []; // This is not needed as we have $this->data

    $data['view'] = "backend/defaultTheme/pages/list"; // This is just a string 
    $this->load->view('backend/defaultTheme/master/master2.php', $data); // Needs to reference the $this->data
}

所以它将变成类似...

public function list()
{
    // Load the subview
    $this->data['view'] = $this->load->view('backend/defaultTheme/pages/list',NULL,TRUE);
    // Display the final page
    $this->load->view('backend/defaultTheme/master/master2.php', $this->data); 
}

该类中的每个方法(函数)都可以访问属性$this->data

您会看到我已经使用过

$this->data['view'] = $this->load->view('backend/defaultTheme/pages/list',NULL,TRUE);

您已经知道,第二个参数是页面数据(变量),在这种情况下,它们是NULL或只是。当第三个参数设置为true(默认为false)时,将不显示视图,但将保存其内容。在这种情况下,进入$this->data['view']

这应该让您思考。

您应该阅读codeigniter用户指南,直到今天我仍然会这样做。