Как вызвать метод remove ()? - PullRequest
1 голос
/ 12 мая 2011

Я тестирую модели в Zend Project, у меня есть вопрос о том, как вызвать метод remove ()?

Это метод поиска, который я тестирую:

<?

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 -> _ model-> remove (), он сообщает мне «вызов функции-члена delete () для необъекта» в 113 класса Custom_Model_Base, который равен «if ($ this-»).> _db-> delete ($ this -> _ table, $ where)! = 0) ", в чем проблема и как вызвать метод remove ()?Admin_Model_Member2 :: init () не может быть вызван в конструкторе Admin_Model_Member2, потому что конструктор защищен.

1 Ответ

1 голос
/ 12 мая 2011

$ this -> _ db не инициализируется в Custom_Model_Base.Вам нужно вызвать Admin_Model_Member2 :: init () в какой-то момент, прежде чем пытаться удалить запись.Возможно в конструкторе Admin_Model_Member2.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...