在My_Controller中加载视图时出错


Error When Loading View in My_Controller

我一直在尝试实现参考的解决方案:

尝试在my_controller

中加载视图时出错

不知道为什么,但是Aptana指示我的行有语法错误:

parent::load->view('common/header_out');

…当我执行"unexpected T_OBJECT_OPERATOR"

时,解释器会辅助执行它。

编辑:之前我尝试使用:

$this->load->view('common/header_out');

…生成了以下错误:

警告:include(application/errors/error_php.php) [function. php]。在/home/uom2/www/system/core/exceptions .php第167行中没有这样的文件或目录

警告:include() [function.](include_path='.:/usr/local/lib/php:/usr/local/php5/lib/pear')在/home/uom2/www/system/core/exceptions .php中的>第167行

我正在使用CI 2.0。

如有任何帮助,不胜感激。

应用程序/核心/Uom_Controller.php

<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
class Uom_Controller  extends CI_Controller
{
  public   $data = array();  // Array to store data - passed to views.
 protected  $view_path = null;  // Here to overide the view path if n
 
    public function __construct()
    {
        parent::__construct();
    }
    protected function check_session()
    {
        //Here goes your function
    }
 protected function render() {

      $data['page_title'] = 'Your title';
  $data['page_title'] = 'Your title';
      parent::load->view('common/header_out');
      parent::load->->view('home/home', $data);
      parent::load->->view('common/foot');
echo "view rendered:  ".date('Y-m-d H:i:s');

}
}

控制器/home/home。

<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
class Home   extends Uom_Controller  {
    function __construct()
    {
        parent::__construct();
      // Set the view path manually for this method.
      $this->view_path = 'home/home.php';
    }

    function __destruct() {
        $this->render();
    }

    public function index()
    {
        echo "home updated";
        
    }

    public function out()
    {
        echo "logout";
        echo "<br>";
        echo $this->view_path;
        echo "<br>";
        
    }

}

显然的意图是类似的SO帖子在这篇文章的顶部:我想要$this->render();要调用和渲染我的页眉,正文和页脚。

(我的下一个任务是将身份验证检查添加到这个MY_Controller模式,所以我希望任何解决方案都适用于调用视图,也适用于模型。

谢谢大家,在再次转向SO之前,我真的花了几个小时试图找到解决这个问题的方法。

我想你的问题是你调用的是parent::load->view而不是$this->load->view

哎呀。问题在这里:

function __destruct() {
  $this->render();
}

根据菲尔外科医生在这里的评论

__destruct不像预期的那样工作,因为一切都是这样的继承。

…在页面下方,一个更详细的解释似乎是有意义的:

问题是控制器是CI超对象,一旦你毁掉它,你就无法进入CI。而你没有控制销毁过程,所以你不知道还有什么可访问和不可访问的

使用__destruct()来执行除清理操作之外的任何操作销毁当前对象是一个非常糟糕的主意…

简短的回答是,只要你不从"_destruct"中调用扩展类的方法,事情就会正常工作。

希望这能帮助到别人