1

这个问题可能听起来很奇怪,而且确实如此。这就是问题所在:我有一个模型FollowingStationLine,和它对应的表,following_station_lines。在模型中,我试图用$this->save(array('field' => 'value));. 当我点击相应的页面时,该方法似乎在无限循环中调用(我debug()在 save 语句之前和之后放置了一些 s),并且仅在达到内存限制时才结束。我什至尝试了 2GB 的内存,但仍然是同样的问题。

当从另一个控制器调用方法时也会发生这种情况,而不是FollowingStationLinesController. 除了这个之外,所有其他模型/表格都按预期工作。我真的无法想象有什么问题。以下是控制器的代码,分别是模型:

控制器:

    App::uses('AppController', 'Controller');

    class FollowingStationLinesController extends AppController {

    public function admin_set() {
        $this->FollowingStationLine->set(array(1));
    }

}

模型:

App::uses('AppModel', 'Model');

class FollowingStationLine extends AppModel {
    public function set($lineIds = array()){
        if(!is_array($lineIds)){
            return false;   
        }
        $save = array();
        $save[] = array('station_id' => 45);
        debug($save[0]);
        $this->save($save[0]);
    }
  }

任何帮助将不胜感激!

4

1 回答 1

4

CakePHP 的 AppModel 类有一个名为 'set' 的函数,由模型的 'save' 函数调用。通过覆盖 'set',您会导致两种方法之间出现循环。

将您的功能重命名为其他名称,您应该没问题。

您可以检查 AppModel 源以获取更多信息: https ://github.com/cakephp/cakephp/blob/master/lib/Cake/Model/Model.php


更新:

@mark 做了一个很好的评论,如果你的 PHP 配置包含错误报告模式 E_STRICT,你会收到一个错误,因为覆盖不匹配的签名。

设置配置的更多信息:http: //php.net/manual/en/migrating5.errorrep.php

于 2012-03-07T17:17:06.657 回答