0

こんにちは私はCI_Controllersのすべてのインスタンスにパブリック変数($ this-> data [])を追加したいと思います。そうすれば、ページを出力するためのいくつかの基本ルール(css / jsなど)を保存して、各コントローラーに追加させることができますこの配列は、独自の要件を追加します(より多くのcss / js)。これらの配列を取得してページテンプレートのheadタグに挿入するカスタムビュー関数を備えたコアライブラリがあります。

私が考えたオプション。

  1. CI_Controllerを編集して、そこに追加します...それは悪い考えだと思います。

  2. CI_Controllerを拡張するシェルコントローラーを作成し、それにvarを追加してから、他のすべてのコントローラーにシェルコントローラーを拡張させます。

  3. 他の賢い方法はありますか?

CIを使用してから約1か月で、ドキュメントを読んでみましたが、このようなことを行うための組み込みの方法が見つかりませんか?誰かが以前にこれに遭遇したことがありますか?もしそうなら、どのようにそれを解決しましたか?

ありがとう!

[編集]PHP5.3.xの使用[/編集]

4

3 に答える 3

2

http://ellislab.com/codeigniter/user-guide/general/creating_libraries.html

CI_Controller必要な機能を持つように拡張できます。

application / core / MY_Controller.php:

<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');

class MY_Controller extends CI_Controller {


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

    public function my_function()
    {
        return "Cool return from my_function";

    }
}

コントローラー/welcome.php

<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');

class Welcome extends MY_Controller {

    public function index()
    {
        echo $this->my_function();//echo's "Cool return from my_function"
    }
}

で必要な機能を定義するだけですMY_Controller。次に、コントローラーで、extends MY_Controllerの代わりにを使用するextends CI_Controllerと、それらのコントローラー内の任意の場所で関数を呼び出すことができます。

于 2013-03-26T13:44:06.787 に答える
1

特性を使えば、あなたが望むことを簡単に達成できると思います。ここをチェックしてください:PHP:特性

具体的には->例11プロパティの定義。

唯一の制限は、PHP5.4以降です。

于 2013-03-26T13:34:50.163 に答える
0

独自のベースコントローラーファイルを作成して、\ application \ core\MY_Controller.phpから基本的なページ読み込みメソッドを継承できます。

<?php defined('BASEPATH') OR exit('No direct script access allowed');

class MY_Controller extends CI_Controller {

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

    protected function loadPage($path, $data = array())
    {
        $this->load->view('common/head'); // Assuming you will use a folder for page parts
        $this->load->view($path, $data);
        $this->load->view('common/foot');
    }
}

その後、ページコントローラで、同じメソッドをはるかに簡単に呼び出すことができます。

<?php defined('BASEPATH') OR exit('No direct script access allowed');

class User extends MY_Controller {

    public function index()
    {
        $data = array(); // get data from model

        $this->loadPage('user/view', $data); // Assuming you will use folders for sets of views
    }

    public function edit()
    {
        $data = array(); // get data from model

        $this->loadPage('user/edit', $data);
    }
}
于 2016-10-30T08:54:30.527 に答える