Accès au Modèle PHP CodeIgniter "impossible de localiser le modèle que vous avez spécifié"
j'ai essayé de charger quelques modèles pour ce site que je suis en train de construire. Cependant, pour une raison inconnue, il apportera l'erreur suivante :
An Error Was Encountered
Unable to locate the model you have specified: logon_model
Maintenant , j'ai fait mes recherches. Le problème serait que IC traite les noms de fichiers en minuscules. Cependant, mon fichier et le fichier appelant sont en minuscules, comme indiqué ici:
echo "VALIDATING";
// Validation passed. Off we go to account info verification from AA's database. God help us all.
$this->load->model('logon_model');
echo "FOUND MODEL";
$res = $this->logon_model->verify_user($this->input->post('username'),$this->input->post('password'));
echo $this->input->post('username');
echo $this->input->post('password');
L'exécution ne portée "modèle trouvé", s'arrête donc sur le chargement du modèle. J'ai essayé de utilisation:
$this->load->model(site_url('logon_model'));
sans résultat. Besoin de mentionner le fichier de modèle est correctement placé dans le bon dossier model ?
Comment puis-je résoudre ce problème ?
EDIT : en-Tête du fichier de modèle :
class Logon_model extends CI_Model {
....
13 réponses
Lors de la création de modèles, vous devez placer le fichier dans application/models/
et nommer le fichier dans toutes les minuscules comme logon_model.php
logon_model.php
doit contenir les éléments suivants:
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
class Logon_model extends CI_Model
{
public function __construct()
{
parent::__construct();
}
...
Maintenant, ce que vous pouvez faire pour tester si votre modèle d'application est accessible, c'est d'essayer de l'ouvrir dans le navigateur - comme:
http://example.org/application/models/logon_model.php
Si vous voyez le texte pas d'accès direct au script permis cela signifie que vous cliquez sur le bon fichier (si vous avez des doutes, essayez d'écrire quelque chose d'autre dans exit() à la première ligne).
Deuxièmement, pour charger le model dans vos controllers, vous devriez pouvoir faire comme ceci:
public function index()
{
$this->load->model('logon_model');
...
}
si tout ce qui précède se vérifie comme prévu, je commencerais à regarder les permissions de fichiers et/ou éventuellement les liens symboliques si vous utilisez l'un d'eux.
j'utilise codeigniter 3+. J'ai eu le même problème et dans mon cas j'ai changé le nom du fichier modèle à partir de uppser case.
Logon_model.php
voici à quoi un modèle devrait ressembler: assurez-vous que le vôtre est comme ceci.
<?php
class Logon_model extends CI_Model {
function __construct()
{
parent::__construct();
}
function myFunc()
{
// do something
}
}
notez le nom de la classe supérieure.
Pour le charger d'utilisation:
$this->load->model('logon_model');
noter tous les minuscules.
Dans CodeIgniter 3.0-dev (l'obtenir à partir de github) ce n'est pas de travail parce que l'IC est la recherche en tant que première lettre en majuscule.
Vous pouvez trouver le code sur system/core/Loader.php ligne 282 ou ci-dessous:
$model = ucfirst(strtolower($model));
foreach ($this->_ci_model_paths as $mod_path)
{
if ( ! file_exists($mod_path.'models/'.$path.$model.'.php'))
{
continue;
}
require_once($mod_path.'models/'.$path.$model.'.php');
$CI->$name = new $model();
$this->_ci_models[] = $name;
return $this;
}
cela signifie que nous devons créer le fichier avec le nom suivant sur application/models/Logon_mode.php
- je résoudre ce problème avec cette façon:
- j'ai renommé file do Page_model.php
- le nom de la classe à Page_model s'étend...
- je fais appel à chargement automatique:
$autoload['model'] = array('Page_model'=>'page');
Fonctionne très bien.. J'espère aider.
la première lettre du nom du fichier et le nom de la classe doivent être en majuscules.
votre classe de model sera
classe Logon_model extends CI_Model
et le nom de fichier Logon_model.php
accédez à partir de votre contoller comme
$this->load->modèle ("Logon_model');
les modèles doivent être nommés et appelés avec la première lettre du nom du modèle en majuscules et le reste en minuscules.
Par exemple: $this->load->model('Logon_model');
et:
class Logon_model extends CI_Model {
...
mais vous avez raison à propos du nom du fichier.
pour ajouter à la réponse de @jakentus, voici ce qui a fonctionné pour moi:
Changer le nom du fichier dans la modèles de paquet
Logon_model.php
(la première lettre en haut comme @jakentus l'a dit correctement)changer le nom de la classe comme le nom du fichier, c.-à-d.
class Logon_model extends CI_Model
changer le nom dans la méthode load aussi comme
$this->load->model('Logon_model');
Espérons que cette aide. Heureux de codage. :)
j'ai eu le même problème, mais je l'ai corrigé en modifiant mon application/config/routes.fichier php.
j'ai fait une restructuration de mes répertoires de controllers et j'ai oublié de l'effectuer sur le fichier routes.
Avant:
$route['application/apply'] = 'ex/application/account/create';
et maintenant:
$route['application/apply'] = 'application/account/create';
changer le nom du nom du modèle en commençant par les travaux en majuscules. Exemple: Login_model.php au lieu de login_model.php
vous devez changer le nom de votre modèle. en localhost petit travail de lettre correctement mais en ligne cela ne fonctionne pas. pour exa:
common_model.php
remplacé par
Common_model.php
Juste ajouter mon problème que j'ai eu:
$this->load->model("planning/plan_model.php");
et .php
ne devrais pas être là, donc il doit avoir été:
$this->load->model("planning/plan_model");
espérons que cela aide quelqu'un
assurez-vous que:
- première lettre majuscule
- nom de la classe nom exact du fichier
- assurez-vous que votre dossier se termine avec .PHP extension
dans mon cas, j'avais 1 et 2 corrects mais j'ai oublié de donner un nom à mon fichier .PHP extension. Comment j'ai oublié, aucune idée, mais il m'a certainement donné un moment difficile d'essayer de comprendre le problème