【问题标题】:How to override model's constructor correctly in CakePHP如何在 CakePHP 中正确覆盖模型的构造函数
【发布时间】:2012-04-26 14:03:17
【问题描述】:

我在 CakePHP 2.0 中测试模型时遇到了麻烦,问题似乎出在模型的构造函数上。

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

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

马克的故事告诉我:

如果你有一个构造函数,请确保你覆盖了构造函数 正确。不这样做会导致这样的错误。

我做错了什么?

【问题讨论】:

  • 会发生什么?如果你需要帮助,你必须给我们更多的帮助......
  • 好吧,发生什么应该无关紧要。但是如果你想知道的话:testCase 没有很好地选择数据库。当它应该与测试版本一起使用时,它与默认版本一起使用。 (顺便说一句,我已经更新了帖子)
  • CakePHP 的所有版本都存在这个问题。我在 1.3 中遇到过同样的情况

标签: cakephp testing constructor overwrite


【解决方案1】:

你为什么不看看核心代码 毕竟它的开源: 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);
}

【讨论】:

【解决方案2】:

与其重写构造函数,不如将 beforeFilter() 用于控制器或模型的 before 方法,例如 beforeFind()、beforeValidate() 等。

【讨论】:

    【解决方案3】:

    我发现的一种方法是这样做:

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

    它使您不必担心父母会通过什么。虽然那段代码很丑。

    【讨论】:

      猜你喜欢
      • 2014-04-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-06-09
      • 2020-04-15
      相关资源
      最近更新 更多