2011-05-12 85 views
1

我在zend项目中测试模型,我有一个关于如何调用remove()方法的问题?如何调用remove()方法?

这是find方法我测试:

<? 

class Admin_Model_Member2 extends Custom_Model_Base { 


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



    static function load($id) { 
     return self::_selectAndBind(
       get_class(), 
         self::getDefaultAdapter() 
         ->select() 
         ->from('member') 
         ->where('id = ?', array($id)), 
       true); 
    } 



    function remove() { 
     return $this->delete(); 
    } 



} 

Admin_Model_Member2延伸Custom_Model_Base,这是Custom_Model_Base,

abstract class Custom_Model_Base { 
static public function init($default_adapter = null) 
    { 
     if (self::$_db_default === null) 
     { 
      if (!is_null($default_adapter)) 
      { 
       if (!$default_adapter instanceof Zend_Db_Adapter_Abstract) 
       { 
        throw new Exception('Provided adapter does not extend Zend_Db_Adapter_Abstract'); 
       } 
       self::$_db_default = $default_adapter; 
      } 
      else if (Zend_Registry::isRegistered('db')) 
      { 
       self::$_db_default = Zend_Registry::get('db'); 
      } 
      else 
      { 
       throw new Exception('No default adapter provided for the model layer'); 
      } 

     } 
    } 

public function delete() 
    { 
     $where = array(); 
     foreach($this->_primary as $column) 
     { 
      $where[$column] = $this->_data[$column]; 
     } 

     if ($this->_db->delete($this->_table, $where) != 0) 
     { 
      foreach($this->_primary as $column) 
      { 
       $this->_data[$column] = null; 
      } 
      return true; 
     } 
     return false; 
    } 
} 

这是测试情况下,我写的,

public function testCanRemove() { 
     $data = "80176"; 
      Admin_Model_Member2::init(); 
     $this->_model = Admin_Model_Member2::load($data); 
     $this->assertTrue($this->_model->remove()); 
    } 

我想测试remove()方法,所以我加载($ id)一个对象,但是当我调用$ this - > _ mo del-> remove(),它告诉我“调用成员函数delete()在一个非对象”类113 Custom_Model_Base这是“if($ this - > _ db-> delete($ this - > _ table, $ where)!= 0)“,问题是什么以及如何调用remove()方法? Admin_Model_Member2 :: init()不能在Admin_Model_Member2的构造函数中调用,因为构造函数是受保护的。

+0

我已将您的两个帐户合并在一起。 [请阅读有关基于Cookie的帐户的此Faq条目。](http://meta.stackexchange.com/questions/44557/why-should-i-register-my-account/44562/1228) – Will 2011-05-13 15:54:53

回答

1

$ this - > _ db未在Custom_Model_Base中初始化。在尝试删除记录之前,您需要在某个时刻调用Admin_Model_Member2 :: init()。也许在Admin_Model_Member2的构造函数中。