为什么构造函数不发送数组来查看?

时间:2013-03-08 13:43:36

标签: php codeigniter

我的 admin.php 控制器中有类似的内容:

function __construct()
{
    parent::__construct();
    if (!$this->session->userdata('logged_in_admin') )
    {
        redirect('admin/login');
    }
    $this->load->model('mdl_admin');
    $data['my_test_variable'] = "This is test!";
}

public function index()
{
    $data['header'] = "Home";
    $this->load->view('admin_frontpage', $data);
}

在我看来:

<?php echo $header; ?>
<?php echo $my_test_variable; ?>

但只回显标头变量。即使发送到视图文件的$ data数组也包含 my_test_variable

为什么?

我做错了什么?

即使我尝试例如:

    $this->data['my_test_variable'] = "This is test!";

它不起作用。

3 个答案:

答案 0 :(得分:2)

但是发送到视图的$data数组也不包含my_test_variable。在index()函数中,您不会在将其发送到视图时设置该值。

__construct()中,$data是仅在__construct()函数中可见的局部变量。如果你想在函数外部访问它,可能在index()函数中,一个选项是使它成为一个实例属性。

例如,代替$data['my_test_variable'],您可以使用$this->data['my_test_variable'],然后再次index(),而不是$data,您可以使用$this->data

答案 1 :(得分:2)

通过视图传递您的数据

       function __construct()
      {
           parent::__construct();
            if (!$this->session->userdata('logged_in_admin') )
            {
              redirect('admin/login');
            }
           $this->load->model('mdl_admin');

         }

       public function index()
         {
             $data['header'] = "Home";
             $data['my_test_variable'] = "This is test!";
             $this->load->view('admin_frontpage', $data);
         }

试试这个......

答案 2 :(得分:1)

首先,你是在PHP中隐式创建变量 - 这是不好的做法。您不应该在不存在的变量中设置数组键。启用正确的错误报告设置后,这将导致您遇到问题。

首先,让我们解决这个问题:

function __construct() {
    parent::__construct();

    if (!$this->session->userdata('logged_in_admin')) {
        redirect('admin/login');
    }

    $this->load->model('mdl_admin');

    $data = array();
    $data['my_test_variable'] = "This is test!";
}

public function index() {
    $data = array();
    $data['header'] = "Home";
    $this->load->view('admin_frontpage', $data);
}

而且,在这样做的过程中,我认为你应该能够立即看到你的问题。 __construct()index()方法使用不同的堆栈执行。这意味着你声明 in 的变量对另一个不可用。为了完成这项工作,你需要做的就是利用你正在创建的类的实例变量,如下所示:

class MyView {
    protected $data = array();

    function __construct() {
        parent::__construct();

        if (!$this->session->userdata('logged_in_admin')) {
            redirect('admin/login');
        }

        $this->load->model('mdl_admin');
        $this->data['my_test_variable'] = "This is test!";
    }

    public function index() {
        $this->data['header'] = "Home";
        $this->load->view('admin_frontpage', $this->data);
    }
}

现在你应该得到你想要的东西