【问题标题】:Codeigniter: Passing data from parent controller constructor to view( Undefined variable error )Codeigniter:将数据从父控制器构造函数传递到视图(未定义变量错误)
【发布时间】:2014-01-19 08:33:36
【问题描述】:

我的控制器:

class MY_Controller extends CI_Controller {

        public $data = array();

        function __construct() {
            parent::__construct();
            $this->data['errors'] = array();
            $this->data['site_name'] = config_item('site_name');
        }

}

管理员控制器:

class Admin_Controller extends MY_Controller {

    function __construct() {
        parent::__construct ();
        $this->data ['meta_title'] = 'Admin Panel';
        $this->load->helper ( 'form' );
        $this->load->library ( 'form_validation' );
    }
}

用户控制器:

class User extends Admin_Controller {

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

        public function login() {
            $this->data['subview'] = 'admin/user/login';
            $this->load->view('admin/_layout_modal', $this->data);
        }
         }

查看:_layout_modal.php

$this->load->view($subview);
echo $meta_title;

但是 $subview 和 $meta_title 都抛出“未定义变量”错误。

遇到 PHP 错误

严重性:通知

消息:未定义变量:子视图

文件名:admin/_layout_modal.php

【问题讨论】:

  • 有什么建议吗?我从 24 小时开始努力解决这个问题
  • 你的 adminController 放在哪里?

标签: php codeigniter controller


【解决方案1】:

默认情况下,$this->load->view 直接将数据发送到浏览器。

您似乎想以字符串格式加载视图,而不是直接发送到浏览器。

你需要给'view'函数添加一个参数

我认为您应该像这样更改代码:

用户控制器:

    public function login() {
        $this->data['subview'] = $this->load->view('admin/user/login', true);
        $this->load->view('admin/_layout_modal', $this->data);
    }

查看:_layout_modal.php

echo $subview;
echo $meta_title;

参考:

http://ellislab.com/codeigniter/user-guide/general/views.html

【讨论】:

  • OP 将视图的 name 存储在 $subview 变量中,并使用该 name 将子视图加载到主视图中。虽然您的回答在技术上是正确的,但 OP 的代码也是正确的
  • 是的!他的做法也是对的。有很多方法,很酷。但是在视图页面中,我遇到了未定义的变量错误,即使我在控制器中添加了 $this->data 也是如此。我不应该得到那个错误。不知何故,这条线没有做好它的工作: $this->load->view('admin/_layout_modal', $this->data);
【解决方案2】:

尝试使用$data['subview'] 而不是$this->data['subview'] 并且在加载视图时使用$this->load->view('admin/layout',$data); 并在布局文件中调用<?php echo $subview; ?>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-09
    • 1970-01-01
    • 2016-05-30
    相关资源
    最近更新 更多