【问题标题】:Error When Loading View in My_Controller在 My_Controller 中加载视图时出错
【发布时间】:2011-10-04 01:08:59
【问题描述】:

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

Error when trying to load view in 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.include]:未能打开流:第 167 行的 /home/uom2/www/system/core/Exceptions.php 中没有此类文件或 > 目录

警告: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 >line 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

<?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。

【问题讨论】:

    标签: php codeigniter


    【解决方案1】:

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

    【讨论】:

    【解决方案2】:

    呃。问题来了:

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

    根据 Phil Surgeon 在here 上的评论

    __destruct 无法按预期工作,因为一切都是如此 继承。

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

    问题是控制器是 CI 超级对象,一旦你 破坏它,您将失去对 CI 的所有访问权限。而你没有任何 控制破坏过程,所以你不知道什么还在 可访问,什么不可访问。

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

    简短的回答是,只要您不从“_destruct”的扩展类中调用方法,一切都会正常工作。

    希望这对其他人有所帮助。

    【讨论】:

    • 您只接受了 3 个答案,甚至没有接受您自己的答案,这似乎很奇怪!该功能是有充分理由的。别介意有些人在努力写出完美的答案时可能会感到沮丧。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-10-04
    • 2015-10-29
    • 2021-03-13
    • 1970-01-01
    • 2018-02-16
    • 2012-07-25
    • 1970-01-01
    相关资源
    最近更新 更多