2

ライブラリを拡張する際にデータベース機能にアクセスしたい。

class My_Router extends CI_Router {

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

    function _set_routing()
    {
        .....
        ....
        $query=$this->db->get('custome_routes');
        $custom_routes=$query->result_array();
        ....

    }
 }

以下も試してみました

 $CI =& get_instance();
    $query=$CI->db->get('custome_routes');
    $custom_routes=$query->result_array();

しかし、それは機能しません。

助けて....

よろしくお願いします、ローガン

4

2 に答える 2

3

get_instance()残念ながら、フレームワークのロード順序と、ルーティング情報を使用してロードするコントローラークラスを決定し、の戻り値がそのコントローラーインスタンスであるため、これを行うことはできません。

requiresystem / DB.phpを実行し、DB()関数を使用してdbクラスのインスタンスを取得することにより、CIの組み込みクラスを使用してみることができます。

public function _set_routing(){
    require_once BASEPATH.'database/DB.php';
    $db = DB('default', true); // you can set the database.php config's group, or a full DSN string here
    $custom_routes = $db->get('custome_routes')->result_array();
}

または、サブクラスでCIに依存しないデータベース接続を作成することもできます。この「完全なテーブルを取得する」クエリの場合、これは難しいことではありません。CIデータベース構成ファイルをインクルードし、その値を問題なく使用できるはずです(環境に注意してください)。

于 2012-08-25T13:50:03.510 に答える
1

インスタンスからデータベースをロードするだけです($CI->load->database();

$CI =& get_instance();
$CI->load->database();

$query=$CI->db->get('custome_routes');
$custom_routes=$query->result_array();

編集:これはライブラリに対してのみ機能し、コアクラスに対しては機能しません。

于 2012-08-25T15:29:01.457 に答える