2011-01-16 11 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

誰かが私が間違っていることを知っていますか? ありがとう

+0

私は、CIフレームワークを使用する方法は使用していないようです。あなたは何を達成しようとしていますか?ビューファイルを表示するプレーンコントローラ? – Erik

+0

私はヘッダーとフッタービューファイルを各ページに持つことができますが、ヘッダーとフッターファイルをすべてのページビューに含める必要はありません。 – codeigniterN00b

+0

実際に彼はすべてのビューの汎用コントローラーを作成しようとしていますが、代わりに 'parent :: load-> view( 'structure/header'、$ data);を実行してみてください。 – RobertPitt

答えて

0

ライブラリMy_Controllerには、$ thisの代わりにparentというキーワードを使用する必要があります。

あなたのコードはそうのようになります。

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-> load-> view(...) 'の明示的な呼び出しを含め、MY_Controllerクラスの' $ this'のインスタンスをたくさん持っています。 – treeface

+0

これは ' index'このクラスはベースコントローラの拡張ですので、 'class index extends MY_Controller'に行きます.OPコメントを見るとこの答えは正しいです。 – RobertPitt

0

私はあなたが、あなたはセットアップにあなたのヘッダビューとフッターのビューを含むテンプレートを希望している正確に達成しようとしているものを理解している場合、しかし、呼び出しなしアプリケーション全体で使用する各コントローラーのヘッダーとフッターのビューこれを達成するために私がしたことがここにあります。

まず、ビューの下に新しいフォルダを作成します。この例では、「includes」とします。新しく作成したインクルードフォルダの中に、header.php、footer.php、およびtemplate.phpという3つのファイルを作成します。セットアップあなたのヘッダーとフッターを適切にして、次のように見て、あなたの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); 
    } 

・ホープこのことができます!