Несколько принадлежат, чтобы создать ошибку кэширования - PullRequest
1 голос
/ 13 февраля 2011

Я обновляю существующее приложение с CakePHP 1.2 до 1.3.Упрощенная версия одной из моделей выглядит следующим образом:

class Load extends AppModel {

 var $belongsTo = array(
     'OriginCity' => array(
     'className' => 'City',
     'foreignKey' => 'origin_city_id',
     'conditions' => '',
     'fields' => '',
     'order' => '',
  ),
     'DestinationCity' => array(
    'className' => 'City',
    'foreignKey' => 'destination_city_id',
    'conditions' => '',
    'fields' => '',
    'order' => '',
     )
   );
 }

Когда я поднимаю список своих моделей "Нагрузки", он работает нормально с первого раза, но после этого я получаю:

 Catchable fatal error: Object of class __PHP_Incomplete_Class could not be converted to string in /home/mike/Projects/myapp/cake/libs/debugger.php on line 554

Если я вручную удаляю кеш, он работает нормально.

Я начал удалять файлы в app/tmp/cache/persistent по одному и работает после удаления файла load.php.Если я сделаю php load.php, он вернется без ошибок или чего-либо еще (поэтому я предполагаю, что это работает).

Моя теория заключается в том, что он работает нормально с первого раза, но когда Cake 1.3 получает кэш Load, он пытается посмотретьдля объектов с именами OriginCity и DestinationCity, которых, разумеется, нет.

Итак, что я могу сделать с кешем, чтобы заставить его вести себя?Или есть лучший способ заставить CakePHP 1.3 указывать на два разных belongsTo для указания на один и тот же тип объекта?

РЕДАКТИРОВАТЬ: Я изменил метод кэширования на APC, и у меня все еще осталась та же проблема.Я отключил кеширование по всему сайту, и это сработало.

1 Ответ

0 голосов
/ 11 августа 2011

Это результат того, что в 5.2 больше нет возможности напечатать объект, например msgstr "напечатать $ myObject". Вместо этого это вызовет __toString (), которая, если она не существует, приведет к смерти кода с уловимой фатальной ошибкой.

Вы можете исправить это, добавив __toString () в ваш app_controller

 public function __toString(){
     return "Needed to print an object";
 }
...