Отключить функцию автоматической модели Cakephp

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

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

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


person SeanDowney    schedule 19.09.2008    source источник


Ответы (5)


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

Насколько я знаю, вы не можете отключить автоматическое моделирование.

person deceze♦    schedule 19.09.2008

Торт 1.2

Это хак, и это уродливо, потому что вам нужно редактировать файлы ядра торта, но я делаю это так: \cake\libs\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

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

См. документы Cake Api для инициализации

ClassRegistry.php — функция инициализации

person SeanDowney    schedule 20.09.2008
comment
В Cake 2 вы редактируете Cake\Utility\ClassRegistry.php и меняете function init($class, $strict = false) на function init($class, $strict = true). Он выдаст Fatal Error: Call to a member function getDataSource() on a non-object, если файл модели не существует. - person Costa; 02.02.2013

Использовать

var $useTable = false;

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

person Mladen Mihajlovic    schedule 19.09.2008

Удалите все кешированные файлы (все файлы в каталоге app/tmp, сохраните папки)

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

person Alexander Morland    schedule 28.09.2008

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

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

Помните правила для контроллера:

* classname: BlastsController
* filename: blasts_controller.php

для модели:

* classname: Blast
* filename: blast.php

Не забывайте правильно обрабатывать неправильные перегибы.

person dr Hannibal Lecter    schedule 18.04.2009