在My_Controller中加载视图时出错

时间:2011-10-04 01:08:59

标签: php codeigniter

我一直在尝试实施以下引用的解决方案:

Error when trying to load view in my_controller

不知道为什么,但Aptana在我的行上表示语法错误:

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

...当我执行时由解释器借调:“意外的T_OBJECT_OPERATOR”

编辑:以前我尝试过使用:

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

...产生了以下错误:

  

警告:include(application / errors / error_php.php)[function.include]:无法打开流:/home/uom2/www/system/core/Exceptions.php上没有这样的文件或>目录167

     

警告:include()[function.include]:无法打开'application / errors / error_php.php'以包含>(include_path ='。:/ usr / local / lib / php:/ usr / local / php5 / lib / pear')/home/uom2/www/system/core/Exceptions.php on>第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.php

<?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-&gt; render();被调用并呈现我的页面标题,正文和页脚。

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

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

2 个答案:

答案 0 :(得分:0)

我认为您的问题是您正在调用parent :: load-&gt;视图而不是$ this-&gt; load-&gt; view

答案 1 :(得分:0)

唉。这是问题:

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

根据Phil Surgeon对here

的评论
  由于一切都是这样,

__ destruct无法按预期工作   继承的。

...在页面下方,更详细的解释似乎有意义:

  

问题在于控制器是CI superobject,一旦你   破坏这一点,你失去了对CI的所有访问权限。而且你没有   控制破坏过程,所以你不知道什么是静止的   可访问的,不可访问的。

     

将__destruct()用于清除操作以外的任何操作   破坏当前对象是一个非常糟糕的主意......

简短的回答是,只要你没有从“_destruct”调用扩展类中的方法,事情就会起作用。

希望这有助于其他人。