1

グローバル ページ ヘッダー ファイルをロードするように CI_Controller クラスを拡張しようとしているので、すべてのコントローラー メソッドの最初にロードする必要はありません。機能していないようです。コントローラー拡張機能自体が機能することはわかっています...モデル メソッドの呼び出しをコンストラクターから削除し、それをコントローラー メソッドからロードすると、残りのコントローラー拡張機能は正常に機能します。しかし、コントローラー拡張機能のコンストラクター内からモデル メソッドを読み込むと、空白のページが表示されます (まだメイン コンテンツを生成していません)。

何か案は?

アプリケーション/コア/MY_Controller.php

<?php
class MY_Controller extends CI_Controller {

    var $user = array();

    function __construct(){

        parent::__construct();
        $this->load->model('member');

        if($this->session->userdata('member_id')){

            $this->member->get_info($this->session->userdata('member_id'));
            $this->user = $this->member->info;
            $this->member->update_activity($this->session->userdata('member_id'));

        } else {

            $this->load->helper('cookie');

            if(get_cookie('Teacher Tools Member Cookie')){

                $this->member->auto_login(get_cookie('Teacher Tools Member Cookie'));

            } else {

                $this->user = $this->member->default_info();
            }

        }

        $this->load->model('template');
        $this->template->overall_header();
    }
}

アプリケーション/モデル/template.php

<?php

class Template extends MY_Model {

    function __construct(){

    parent::__construct();

}

function overall_header($title = 'Home'){

    $data = array(
        'BASE_URL' => base_url(),
        'MAIN_NAVIGATION' => $this->main_navigation(),
        'TOOLBAR' => $this->toolbar()
    );

    return $this->parser->parse('overall_header.tpl', $data);

}

MY_Model は、メンバー情報を $this->user にロードするための CI_Model クラスの拡張です。

4

2 に答える 2

0

このため、config/autoload.php があります。

$autoload['model'] = array('YourModel');
于 2013-06-06T16:20:47.413 に答える
0

応答の生成は Controller のメソッドで行われ、すべての HTML ピースがそこに貼り付けられると思います。したがって、呼び出している場合は/controller/method_amethod_a応答を返す責任がありますが、コンストラクターでは応答を設定できません。

各メソッドで何度も何度もこれを行う必要がないように、Constructor で重要なデータを一度設定することに同意します。出力をコントローラーレベルに割り当ててからvariable、それをvariableコントローラーのメソッドで使用する必要があると思います。

私はあなたが私の主張を理解していると確信しています。

于 2013-06-05T06:55:31.717 に答える