Désactiver la fonctionnalité Auto Model & # 8220; de Cakephp & # 8221;
-
01-07-2019 - |
Question
Dans cake 1.2, il existe une fonctionnalité qui permet au développeur de ne pas avoir à créer de modèles, mais plutôt de confier à cake le travail de détective au moment de l'exécution et de créer le modèle pour vous. Ce processus se produit à chaque fois et est soigné mais dans mon cas très dangereux. J'ai lu quelque chose à ce sujet quelque part et maintenant je vis le mauvais côté de cela.
J'ai créé un plugin avec tous les fichiers et tout semblait génial. C'est jusqu'à ce que j'ai essayé d'utiliser certaines des associations et fonctions du modèle. Puis le gâteau prétend que ce modèle que j'ai créé n'existe pas. Je me suis limité à utiliser la fonctionnalité de modèle automatique au lieu de lancer et d'erreur ! Donc, je n'ai aucune idée de ce qui ne va pas!
Quelqu'un sait-il comment désactiver cette fonctionnalité de modèle automatique? C'est une bonne idée, mais je n'arrive pas à trouver où je me suis trompé avec mon plugin et une erreur serait très utile!
La solution 2
Cake 1.2
C'est un bidouillage et c'est moche, car vous devez éditer des fichiers de base de gâteau, mais voici comment je le fais: \ cake \ libs \ class_registry.php: ligne 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);
}
Cake 2
Costa recommande de remplacer $ strict par true dans la fonction init à la ligne 95 de Cake \ Utility \ ClassRegistry.php
Autres conseils
Il est toujours possible de créer le fichier de modèle et de définir var $ useTable = false.
Si ce n'est pas ce que vous demandez et que le modèle et ses associations existent réellement, mais Cake ne semble pas en mesure de les trouver, vous devrez vérifier trois fois les noms de tous les modèles et leurs noms de classe dans le fichier réel. définition du modèle et dans les définitions d'association.
Utiliser
var $useTable = false;
dans la définition de votre modèle.
Supprimez tous les fichiers mis en cache (tous les fichiers sous app / tmp, conservez les dossiers)
Dans la plupart des cas où les modèles semblent agir de manière inattendue, ils n'incluent souvent pas les modifications que vous avez apportées. C'est parce que ce gâteau utilise une ancienne version en cache du modèle.
Euh ... par où on commence. Tout d'abord, comme l'a suggéré Alexander, effacez le cache de votre application.
Si vous obtenez toujours le même comportement, il y a probablement un problème avec les noms de classe et / ou de fichier.
N'oubliez pas de les règles , pour le contrôleur:
* classname: BlastsController
* filename: blasts_controller.php
pour le modèle:
* classname: Blast
* filename: blast.php
Ne craignez pas de gérer correctement les inflexions irrégulières .