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 {

....
36
demandé sur Alexandre Bolduc 2011-11-10 06:38:46

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.

59
répondu Repox 2011-11-10 09:32:48

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

53
répondu jakentus 2015-03-19 12:15:54

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.

8
répondu wclark 2015-07-22 14:09:52

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

4
répondu ialbescu 2014-03-31 08:21:04

- je résoudre ce problème avec cette façon:

  1. j'ai renommé file do Page_model.php
  2. le nom de la classe à Page_model s'étend...
  3. je fais appel à chargement automatique: $autoload['model'] = array('Page_model'=>'page');

Fonctionne très bien.. J'espère aider.

4
répondu Gabriel Glauber 2016-10-21 10:19:27

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');

3
répondu Avnish alok 2016-06-17 10:11:45

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.

2
répondu Jonathan Ratliff 2011-11-10 03:02:42

pour ajouter à la réponse de @jakentus, voici ce qui a fonctionné pour moi:

  1. 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)

  2. changer le nom de la classe comme le nom du fichier, c.-à-d.

    class Logon_model extends CI_Model

  3. changer le nom dans la méthode load aussi comme

    $this->load->model('Logon_model');

Espérons que cette aide. Heureux de codage. :)

2
répondu Atul O Holic 2016-10-21 10:17:35

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';

1
répondu Suleiman Umar 2016-04-09 17:44:37

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

1
répondu user3642940 2016-11-21 01:09:47

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
0
répondu sandeep kumar 2017-05-01 09:19:56

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

0
répondu Frank Conry 2017-10-05 16:25:29

assurez-vous que:

  1. première lettre majuscule
  2. nom de la classe nom exact du fichier
  3. 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

0
répondu theTypan 2017-12-27 08:12:27