2011-01-16 3 views
0

Рассмотрим мой код:Ошибка при попытке загрузить вид в my_controller

<?php 

class MY_Controller extends Controller { 

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

    function _displayPage($page, $data = array()) { 
     $this->load->view('structure/header', $data); 
     $this->load->view($page, $data); 
     $this->load->view('structure/footer', $data); 
    } 
} 
?> 

page.php

<?php 
    class Page extends MY_Controller { 
     function __construct() { 
      parent::__construct(); 
     } 

     function index() { 
      $data['content'] = array('title'=>'hello world'); 
      $this->_displayPage('home', $data); 
     } 
    } 
?> 

При загрузке моей страницы на моем браузере, я получаю эту ошибку:

A PHP Error was encountered 
Severity: Notice 
Message: Undefined property: Page::$view 
Filename: libraries/MY_Controller.php 
Line Number: 11

Кто-нибудь знает, что я делаю неправильно? Thanks

+0

Мне кажется, что вы не используете рамки CI так, как это нужно использовать. Чего вы пытаетесь достичь? Простой контроллер, отображающий файл вида? – Erik

+0

Я хочу иметь файл просмотра заголовка и нижнего колонтитула на каждой странице, но я действительно не хочу включать файл заголовка и нижнего колонтитула в каждый просмотр страницы. Я создаю – codeigniterN00b

+0

. Он просто пытается создать общий контроллер для всех своих взглядов, попробуйте сделать «parent :: load-> view (« структура/заголовок », $ data); вместо этого. – RobertPitt

ответ

0

В вашей библиотеке My_Controller вы должны использовать ключевое слово parent вместо $ this.

ваш код должен выглядеть так:

class MY_Controller extends Controller 
{ 
    public function __construct() 
    { 
     parent::Controller(); 
    } 

    function _displayPage($page, $data = array()) 
    { 
     parent::load->view('structure/header', $data); 
     parent::load->view($page, $data); 
     parent::load->view('structure/footer', $data); 
    } 
} 
+0

Это не кажется точным. У меня есть тонны экземпляров '$ this' в моем классе' MY_Controller', включая явный вызов '$ this-> load-> view (...)' – treeface

+0

, это не контроллер действий, такой как ' index' этот класс является расширением базового контроллера, поэтому вы переходите: 'индекс класса расширяет MY_Controller', этот ответ верен, если вы видите комментарии OP. – RobertPitt

0

Если я понимаю, что вы пытаетесь правильно выполнить, Вы желаете настроить шаблон, который включает в себя ваш вид заголовка и вид колонтитулов, но без вызова заголовки и нижние колонтитулы для каждого контроллера, который вы используете во всем приложении. Вот что я сделал для этого.

Сначала создайте новую папку под своими представлениями, в этом примере мы будем называть ее «includes». Внутри вновь созданной включает папку, создайте три файла: header.php, footer.php и template.php. Настройте колонтитулы соответствующим образом, а затем редактировать template.php выглядеть следующим образом:

<?php echo $this->load->view('includes/univ_header'); ?> 

<?php echo $this->load->view($main_content); ?> 

<?php echo $this->load->view('includes/univ_footer'); ?> 

Теперь, с вашего контроллера вы можете определить, что смотреть вы хотели бы установить в качестве «main_content». Например, если у вас есть home.php в ваших взглядах папки, и вы хотите, чтобы обернуть его с верхним и нижними колонтитулами вы могли бы сделать это в вашем контроллере следующим образом:

function index() { 
     $data['content'] = array('title'=>'hello world'); 
     $data['main_content'] = 'home'; 
     $this->load->view('includes/template', $data); 
    } 

Надеются, что это помогает!

Смежные вопросы