2011-06-15 22 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)给我:NULL

Zend_Debug::dump(Zend_Registry::get('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' 在我的应用程序/引导关键.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); 
    } 

我确实有:autoloaderNamespaces.Mylib = "Mylib_" in application.ini

我错了什么?

回答

1

这里有几个问题:

  • 在ACL类的init()方法永远不会被调用(至少不会在你的例子)
  • 的init()方法是创建另一个数据库连接 - 尽量重用你在引导
  • 要调用initRole(创建的)静态时,它不是一个静态方法

你不包括您的应用程序,你叫ACL中的一部分类,这可能是错误的原因。例如。如果您在数据库资源设置之前在引导程序中实例化类,这将解释您看到的错误。只要

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

非常感谢。问题已经解决了。 – 2011-06-16 03:11:48

相关问题