Отключите «функцию автоматической модели» Cakephp.
-
01-07-2019 - |
Вопрос
В 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
Другие советы
Всегда есть возможность создать файл модели и установить var $useTable = false.
Если это не то, что вы запрашиваете, и модель и ее ассоциации действительно существуют, но Cake, похоже, не может их найти, вам придется трижды проверить имена всех моделей и имена их классов как в фактическом в определении модели и в определениях ассоциаций.
AFAIK, вы не можете отключить автоматическое моделирование.
Использовать
var $useTable = false;
в определении вашей модели.
Удалить все кэшированные файлы (все файлы в папке app/tmp, сохраните папки)
В большинстве случаев, когда кажется, что модели ведут себя неожиданным образом, они часто не включают внесенные вами изменения, потому что этот торт использует старую кэшированную версию модели.
Э-э... с чего начнем.Сначала, как предложил Александр, очистите кеш приложения.
Если вы по-прежнему наблюдаете такое же поведение, возможно, что-то не так с именами классов и/или файлов.
Помнить правила, для контроллера:
* classname: BlastsController
* filename: blasts_controller.php
для модели:
* classname: Blast
* filename: blast.php
Не забудь справиться с нерегулярными перегибами правильно.