2008-09-19 7 views
2

В торте 1.2 есть функция, которая позволяет разработчику не создавать модели, а, скорее, торт выполнять детективную работу во время выполнения и создавать модель для вас. Этот процесс происходит каждый раз и является аккуратным, но в моем случае очень опасным. Я читал об этом где-то, и теперь я испытываю плохую сторону этого.Отключить Auto Model Cakephp «feature»

Я создал плагин со всеми файлами, и все оказалось просто замечательным. Это до тех пор, пока я не попытался использовать некоторые из ассоциаций и функций модели. Тогда торт утверждает, что эта модель, которую я создал, не существует. Я сузил его до торта, используя эту функцию авто модели, вместо того, чтобы метать и ошибаться! Поэтому я понятия не имею, что случилось!

Кто-нибудь знает, как отключить эту функцию авто модели? Это хорошая мысль, но я не могу найти, где я ошибся с моим плагином, и ошибка будет очень полезна!

ответ

3

Cake 1,2

Это хак, и это некрасиво Кас вам нужно отредактировать основные торт файлы, но это, как я это сделать: \ торт \ ЛИЭС \ class_registry.php: линия 127ish

if (App::import($type, $plugin . $class)) { 
    ${$class} =& new $class($options); 
} elseif ($type === 'Model') { 
    /* Print out whatever debug info we have then exit */ 
    pr($objects); 
    die("unable to find class $type, $plugin$class"); 
    /* We don't want to base this on the app model */ 
    ${$class} =& new AppModel($options); 
} 

торт 2

Коста рекомендует изменить $ строги к истине в функции инициализации на линии 95 Cake\Utility\ClassRegistry.php

See Cake Api Docs for init

ClassRegistry.php - init function

+1

В Cake 2 вы редактируете `Cake \ Utility \ ClassRegistry.php` и меняете` function init ($ class, $ strict = false) `to` function init ($ class, $ strict = true) `. Это вызовет «Неустранимая ошибка: вызов функции-члена getDataSource() для объекта без объекта», если файл модели не существует. – Costa 2013-02-02 04:35:08

3

Всегда существует возможность фактически создать файл модели и установить var $ useTable = false.
Если это не то, о чем вы просите, и модель и ее ассоциации действительно существуют, но Cake, похоже, не может их найти, вам нужно будет втрое проверить имена всех моделей и их имена классов в обоих фактическое определение модели и определения ассоциаций.

AFAIK Вы не можете отключить автомодель.

1

Использование

var $useTable = false; 

в вашем определении модели.

1

Удалить все кэшированные файлы (все файлы в приложение/TMP, сохранить папки)

В большинстве случаев, когда, кажется, действует неожиданным образом модели, часто они не включают изменения, которые вы сделали, потому что этот торт использует старую кешированную версию модели.

0

Э-э ... с чего мы начнем. Во-первых, как предложил Александр, очистите кеш приложений.

Если у вас все еще такое же поведение, возможно, что-то не так с именами классов и/или файлов.

Помните the rules для контроллера:

* classname: BlastsController 
* filename: blasts_controller.php 

для модели:

* classname: Blast 
* filename: blast.php 

Не Foget к handle the irregular inflections правильно.