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

StackOverflow https://stackoverflow.com/questions/100365

Вопрос

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

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

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

Это было полезно?

Решение 2

Торт 1.2

Это хак, и это некрасиво, потому что вам нужно редактировать основные файлы торта, но я это делаю так:\cake\libs\class_registry.php:строка 127иш

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 в функции init в строке 95 Cake\Utility\ClassRegistry.php

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

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

Другие советы

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

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

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

var $useTable = false;

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

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

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

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

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

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

* classname: BlastsController
* filename: blasts_controller.php

для модели:

* classname: Blast
* filename: blast.php

Не забудь справиться с нерегулярными перегибами правильно.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top