2012-04-14 2 views
3

У меня проблемы с тестированием модели в CakePHP 2.0, и, похоже, проблема заключается в конструкторе модели.Как правильно переопределить конструктор модели в CakePHP

public function __construct(){ 
    parent::__construct(); 
    $this->_pagi_cuantos = 2; 
} 

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

Mark Story сказал мне:

, если у вас есть конструктор, убедитесь, что вы перекрывая конструктор правильно. В противном случае будут возникать такие ошибки.

Что я не так?

+0

Что происходит? Вам нужно будет дать нам что-то еще, если вы захотите помочь ... – Joep

+0

Ну, что должно быть неуместно. Но если вы хотите это знать: testCase не хорошо отображает базу данных. Он работает со значением по умолчанию, когда он должен работать с тестовым. (btw, я обновил сообщение) – Alvaro

+0

Эта проблема актуальна для всех версий CakePHP. Я столкнулся с тем же в 1.3 –

ответ

18

почему вы не смотрите в основной код его с открытым исходным кодом в конце концов: https://github.com/cakephp/cakephp/blob/2.1/lib/Cake/Model/Model.php#L653

так для всех моделей:

public function __construct($id = false, $table = null, $ds = null) { 
    parent::__construct($id, $table, $ds); 
} 
+0

Спасибо! Он работал хорошо. – Alvaro

+0

Это также упоминается в документации API CakePHP 2.0 для [Метод __construct для переопределения модели] (https://api.cakephp.org/2.0/class-AppModel.html#___construct) – icc97

6

Вместо того, чтобы переопределить конструктор, как об использовании beforeFilter() для контроллеров или предшествующих методов для модели, таких как beforeFind(), beforeValidate() и т. д.

1

Один из способов, который я нашел, - сделать что-то вроде этого:

function __construct() { 
    call_user_func_array(array('parent', '__construct'), func_get_args()); 
} 

Это позволяет вам не беспокоиться о том, что передается родителям. Хотя этот код довольно отвратительный.

Смежные вопросы