Ошибка при загрузке представления в My_Controller - PullRequest
0 голосов
/ 04 октября 2011

Я пытался реализовать решение, указанное по адресу:

Ошибка при попытке загрузить представление в 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 в> строке 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-> render (); чтобы вызывать и отображать заголовок, тело и нижний колонтитул моей страницы.

(Моя следующая задача - добавить проверку подлинности в этот шаблон MY_Controller, поэтому я надеюсь, что любое решение, работающее для вызова представлений, также работает на моделях.

Спасибо всем, и я действительно потратил часы, пытаясь найти решение этой проблемы, снова обращаясь к SO.

Ответы [ 2 ]

0 голосов
/ 05 октября 2011

Тьфу. вот проблема:

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

Согласно замечанию Фила Хирурга о здесь

__ разрушение не работает должным образом из-за того, как все наследуется.

... и далее вниз по странице более подробное объяснение, которое, кажется, имеет смысл:

Проблема в том, что контроллер является суперобъектом CI, как только вы уничтожить это, вы потеряете все доступ к CI. И у вас нет никаких контроль над процессом уничтожения, так что вы не знаете, что еще доступным, а что нет.

Использование __destruct () для всего, кроме действий по очистке уничтожение текущего объекта - очень плохая идея…

Краткий ответ: все работает, если вы не вызываете метод из расширенного класса из _destruct.

Надеется, что это поможет кому-то еще.

0 голосов
/ 04 октября 2011

Я думаю, что ваша проблема в том, что вы вызываете parent :: load-> view вместо $ this-> load-> view

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...