2011-06-15 4 views
0

경로가있는 내 라이브러리를 만들었습니다 : library/Mylib. 나는 library/Mylib/의 클래스가 Acl.php 이름이 :내 자신의 ZF 라이브러리에서 mysql에 연결하는 방법?

class Mylib_Acl extends Zend_Acl{ 
     public $_db; 

     public function init(){ 
      $this->_db = new Zend_Db_Adapter_Pdo_Mysql(
       array(
        'host' => 'localhost', 
        'username' => 'username', 
        'password' => 'password', 
        'dbname' => 'mydb' 
       ) 
      ); 
      Zend_Db_Table_Abstract::setDefaultAdapter($this->_db); 
     } 

public function __construct(){ 
     self::initRole(); 

    } 

     public function initRole(){ 
      Zend_Debug::dump($this->_db); 
      Zend_Debug::dump(Zend_Registry::get('db')); 
      die; 
      $sql = 'SELECT * FROM some_table'; 
       $result = $this->_db->query($sql)->fetchAll(); 

     } 

Zend_Debug::dump($this->_db)이 나에게주는 :

Fatal error: Uncaught exception 'Zend_Exception' with message 'No entry is registered for key 'db'' in /home/truong/public_html/test2/library/Zend/Registry.php:147 Stack trace: #0 /home/truong/public_html/test2/library/Fxml/Acl.php(19): Zend_Registry::get('db') #1 /home/truong/public_html/test2/library/Fxml/Acl.php(62): Fxml_Acl->initRole() #2 /home/truong/public_html/test2/application/Bootstrap.php(25): Fxml_Acl->__construct() #3 /home/truong/public_html/test2/library/Zend/Application/Bootstrap/BootstrapAbstract.php(666): Bootstrap->_initAutoload() #4 /home/truong/public_html/test2/library/Zend/Application/Bootstrap/BootstrapAbstract.php(619): Zend_Application_Bootstrap_BootstrapAbstract->_executeResource('autoload') #5 /home/truong/public_html/test2/library/Zend/Application/Bootstrap/BootstrapAbstract.php(583): Zend_Application_Bootstrap_BootstrapAbstract->_bootstrap(NULL) #6 /home/truong/public_html/test2/library/Zend/Application.php(355): Zend_Application_Bootstrap_BootstrapAbstract->bootstrap(NULL) #7 /home/truong/pu in /home/truong/public_html/test2/library/Zend/Registry.php on line 147 

내가 내 응용 프로그램/부트 스트랩의 핵심 'DB'등록 않았다 NULL

Zend_Debug::dump(Zend_Registry::get('db')) 날이 오류를 줄 .php :

public function _initDb(){ 
     $db = new Zend_Db_Adapter_Pdo_Mysql(
      array(
       'host' => 'localhost', 
       'username' => 'username', 
       'password' => 'password', 
       'dbname' => 'mydb' 
      ) 
     ); 
     Zend_Db_Table_Abstract::setDefaultAdapter($db); 

     Zend_Registry::set('db', $db); 
    } 

그리고 내가 가지고 있었 : application.ini

내가 잘못 했어?

답변

1

몇 가지 문제는 여기에 있습니다 : 당신의 ACL 클래스의 초기화() 메소드는 방법은 다른 데이터베이스 연결을 만드는

  • 초기화() (적어도 귀하의 예제에서) 호출되지 않습니다

    • - 그것은 당신은 ACL을 호출하여 응용 프로그램의 일부가 포함되지 않은 한 정적 방법

    없는 정적 때 당신은 initRole을 (호출

  • 부트 스트랩에서 만든 하나)을 재사용하는 것이 가장 오류의 원인 일 수 있습니다. 예 : 데이터베이스 리소스가 설정되기 전에 부트 스트랩에서 클래스를 인스턴스화하는 경우 이는보고있는 오류를 설명합니다.

    당신은 크게 다음과 같이 뭔가를 변경하여 클래스를 단순화 할 수 있습니다 :

    class Mylib_Acl extends Zend_Acl{ 
        public $_db; 
    
        public function __construct(){ 
         $this->init(); 
         $this->initRole(); 
        } 
    
        public function init(){ 
         $this->_db = Zend_Registry::get('db'); 
        } 
    
        [etc.] 
    } 
    

    을 한이 후 괜찮을는 ACL 클래스를 사용하기 전에 부트 스트랩에서 _initDb() 메소드를 실행한다.

  • +1

    정말 고마워요. 문제가 해결되었습니다. –

    관련 문제