2011-01-16 9 views
0

meinen Code Bedenken Sie:Fehler beim Blick in laden versucht 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); 
     } 
    } 
?> 

Bei meiner Seite in meinem Browser geladen wird, bekomme ich diesen Fehler:

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

Weiß jemand, was ich falsch mache? Dank

+0

Es scheint mir, dass Sie das CI-Framework nicht so verwenden, wie es verwendet werden soll. Was versuchst du zu erreichen? Ein einfacher Controller, der eine View-Datei anzeigt? – Erik

+0

Ich möchte auf jeder Seite eine Kopf- und Fußzeilenansichtsdatei haben, aber ich möchte die Kopf- und Fußzeilendatei nicht wirklich in jede Seitenansicht einfügen. Ich erstelle – codeigniterN00b

+0

ja, er versucht nur, einen generischen Controller für alle seine Ansichten zu erstellen. Versuchen Sie, 'parent :: load-> view ('structure/header', $ data);' stattdessen zu verwenden. – RobertPitt

Antwort

0

In Ihrer Bibliothek My_Controller Sie die parent Schlüsselwort statt diese von $ verwenden sollten.

Ihr Code sollte wie so aussehen:

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

Dies scheint nicht korrekt zu sein. Ich habe Tonnen von Instanzen von '$ this' in meiner 'MY_Controller'-Klasse, einschließlich des expliziten Aufrufs von' $ this-> load-> view (...) ' – treeface

+0

Dies ist kein Action-Controller wie' index 'Diese Klasse ist eine Erweiterung des Basis-Controllers, also gehst du: 'Klassenindex erweitert MY_Controller', diese Antwort ist korrekt, wenn du die OP-Kommentare siehst. – RobertPitt

0

Wenn ich verstehe, was Sie richtig erreichen wollen, sind Sie einrichten wollen, um eine Vorlage, die Ihre Kopfansicht und Seitenansicht enthält, aber ohne Aufruf Kopf- und Fußzeilenansichten für jeden Controller, den Sie in Ihrer Anwendung verwenden. Hier ist, was ich getan habe, um dies zu erreichen.

Zuerst erstellen Sie einen neuen Ordner unter Ihren Ansichten, für dieses Beispiel nennen wir es "Includes". Erstellen Sie im neu erstellten Ordner includes drei Dateien, header.php, footer.php und template.php. Richten Sie Ihre Kopf- und Fußzeilen in geeigneter Weise und bearbeiten Sie Ihre template.php wie folgt aussehen:

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

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

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

Nun, von dem Controller können Sie festlegen, was sehen Sie als Ihre ‚main_content‘ setzen möchten. Zum Beispiel, wenn Sie home.php in Ihre Ansichten Ordner und Sie wollen es wickeln mit Kopf- und Fußzeile Sie so in Ihrem Controller tun würde, wie folgt:

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

hoffe, das hilft!

Verwandte Themen