2012-04-14 69 views
3

我在CakePHP 2.0中测试模型时遇到问题,看起来问题出在模型的构造函数上。如何在CakePHP中正确覆盖模型的构造函数

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

即使我删除了所有内容,但仍然遇到尝试运行测试的问题。

马克的故事告诉我:

,如果你有一个构造函数确保你正确地重写构造 。不这样做会导致这样的错误。

我错了什么?

+0

会发生什么?如果你需要帮助,你必须给我们更多的东西...... – Joep 2012-04-14 13:04:36

+0

那么,发生什么应该是无关紧要的。但是如果你想知道它:testCase不能很好地选择数据库。它适用于默认的测试版。 (顺便说一句,我已经更新了这篇文章) – Alvaro 2012-04-14 13:07:10

+0

这个问题是所有版本的CakePHP实际。我在1.3 – 2012-05-14 20:50:07

回答

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 2012-04-14 15:30:15

+0

在[Overriding Model的__construct方法](https://api.cakephp.org/2.0/class-AppModel.html#___construct)的CakePHP 2.0 API文档中也提到了这一点。 – icc97 2017-10-13 15:22:42

6

而不是重写构造,如何使用beforeFilter ()for controller或之前的模型方法,如beforeFind(),beforeValidate()等。

1

我发现的一种方法是做类似这样的事情:

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

它可以让你不必担心父母通过什么。尽管该代码非常可怕。