CakePHP 2.1 входит в бесконечный цикл при сохранении записи - PullRequest
1 голос
/ 07 марта 2012

Вопрос, вероятно, звучит довольно странно, и это действительно так.Вот проблема: у меня есть модель FollowingStationLine и соответствующая ей таблица following_station_lines.В модели я пытаюсь сохранить запись с $this->save(array('field' => 'value));.Когда я перехожу на соответствующую страницу, кажется, что метод вызывается в бесконечном цикле (я поместил несколько debug() s до и после оператора save), и он заканчивается только тогда, когда достигнут предел памяти.Я пытался даже с 2 ГБ памяти, и все еще та же проблема.

Это происходит также при вызове метода из другого контроллера, отличного от 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]);
    }
  }

Любая помощь будет высоко ценится!

1 Ответ

4 голосов
/ 07 марта 2012

Класс AppModel в CakePHP имеет функцию 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

...