2012-08-25 3 views
2

확장 라이브러리에서 데이터베이스 기능에 액세스하려고합니다. Codeigniter- 기본 라이브러리를 확장하면서 데이터베이스 기능을 사용하는 방법은 무엇입니까?

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(); 

아래 시도했지만 작동하지 않습니다.

도움말 나를 .... 사전에

감사합니다, 로건 불행하게도

답변

3

당신이 할 수없는, 그 때문에 프레임 워크의 로딩 순서 및 라우팅 정보이기 때문에 로드 할 컨트롤러 클래스를 결정하는 데 사용되며 get_instance()의 반환 값은 해당 컨트롤러 인스턴스입니다.

require 시스템/DB.php로 CI 내장 클래스를 사용하고 DB() 함수를 사용하여 db 클래스의 인스턴스를 가져올 수 있습니다.

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 독립 DB 연결을 만들 수 있습니다. CI 데이터베이스 구성 파일을 포함하고 문제없이 값을 사용할 수 있어야합니다 (환경에주의하십시오). 예 ($CI->load->database();)에서

+0

오류가 발생합니다. "치명적인 오류 : 'CI_Controller'클래스가 없습니다." – LoganPHP

+0

@ complex857 SYSDIR 대신'BASEPATH'를 사용하십시오. – ADev

+0

이상하게도 질문에 아무것도 표시되지 않아 테스트 설정이 정상적으로 작동합니다. 나는 단지 짐작하고 있지만'_set_routing()'의 구현이 원래의 것으로 작동하지 않을 수도 있습니다. (대답 중 하나는 분명히 전체 방법이 아닙니다.) – complex857

1

그냥 부하 데이터베이스

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

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

편집 :이 그냥 라이브러리를 작동 및 코어 클래스 작동하지 않습니다.

+1

['_set_routing()'] (https://github.com/EllisLab/CodeIgniter/blob/develop/system/core/CodeIgniter.php#L164)에 대한 호출이 ['get_instance()'] (https://github.com/EllisLab/CodeIgniter/blob/develop/system/core/CodeIgniter.php#L227)이 정의됩니다. – complex857

+0

예, 핵심 클래스에서는 작동하지 않지만, 라우터 로딩 후에 문제는'core/Controller.php'입니다. – ADev