web-dev-qa-db-fra.com

CodeIgniter PHP Accès au modèle "Impossible de localiser le modèle que vous avez spécifié"

J'ai essayé de charger des modèles pour ce site Web que je construis. Cependant, pour une raison inconnue, l'erreur suivante sera générée:

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 minuscule. Cependant, mon fichier et l'appel de fichier sont en minuscule, comme illustré ci-dessous:

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 pas atteint "FOUND MODEL", s'arrête donc au chargement du modèle. J'ai essayé d'utiliser:

 $this->load->model(site_url('logon_model'));

Sans résultat. Besoin de mentionner que le fichier de modèle est correctement placé dans le bon dossier de modèles?

Comment puis-je réparer cela ?

EDIT: En-tête pour le fichier modèle:

class Logon_model extends CI_Model {

....
36
Alexandre Bolduc

Lors de la création de modèles, vous devez placer le fichier dans application/models/ et le nommer en minuscule, comme logon_model.php.

Le logon_model.php devrait 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 vérifier si votre modèle d’application est accessible, c’est d’essayer de l’ouvrir dans le navigateur - comme ceci:
http://example.org/application/models/logon_model.php

Si vous voyez le texte Aucun accès direct au script autorisé, cela signifie que vous cliquez sur le bon fichier (en cas de doute, essayez d'écrire quelque chose d'autre dans exit () dans la première ligne).

Deuxièmement, pour charger le modèle dans vos contrôleurs, 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 commencerai par examiner les autorisations de fichiers et/ou éventuellement les liens symboliques, le cas échéant.

59
Repox

J'utilise codeigniter 3+. J'ai eu le même problème et dans mon cas, j'ai changé le nom du fichier de modèle à partir de la casse supérieure.

Logon_model.php

55
jakentus

Voici à quoi un modèle devrait ressembler: Assurez-vous que le vôtre est comme ça.

    <?php
    class Logon_model extends CI_Model {

    function __construct()
    {
         parent::__construct();
    }

    function myFunc()
    {
      // do something
    }
}

notez le nom de la classe en majuscule.

Pour le charger, utilisez:

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

notez tous les minuscules.

8
wclark

Je résous cela de cette façon:

  1. Je renomme le fichier Page_model.php
  2. Le nom de la classe à Page_model s'étend ...
  3. J'appelle sur l'autoload: $autoload['model'] = array('Page_model'=>'page');

Fonctionne bien .. J'espère aider.

5
Gabriel Glauber

Dans CodeIgniter 3.0-dev (récupérez-le auprès de github), cela ne fonctionne pas car le CI est recherché en première lettre 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 portant le nom suivant sur application/models/Logon_mode.php.

4
ialbescu

La première lettre du nom du fichier et le nom de la classe doivent être en majuscule. 

Votre classe de modèle sera 

la classe Logon_model étend CI_Model

et le nom du fichier sera Logon_model.php

Accédez-y depuis votre contoller comme

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

3
Avnish alok

Les modèles doivent être nommés et appelés avec la première lettre du nom du modèle en majuscule et le reste en minuscule. 

Par exemple: $this->load->model('Logon_model');

et:

class Logon_model extends CI_Model {
...

Mais vous avez raison sur le nom du fichier.

2
Jonathan Ratliff

J'ai rencontré le même problème, mais je l'ai résolu en modifiant mon fichier application/config/routes.php.

J'ai procédé à une restructuration de mes répertoires de contrôleurs et j'ai oublié de l'appliquer au fichier de routes.

Plus tôt:

$route['application/apply'] = 'ex/application/account/create';

et maintenant:

$route['application/apply'] = 'application/account/create'; 

1
Suleiman Umar

vous devez modifier votre nom de modèle première lettre majuscule . pour exa: 

common_model.php

l'a remplacé pour  

Common_model.php
1
sandeep kumar

Changer le nom du modèle commençant par Uppercase fonctionne. Exemple: Login_model.php au lieu de login_model.php

1
user3642940

Changez le nom de votre fichier de modèle, commencez par une lettre majuscule comme ceci: Logon_model.php

Cela se produit lorsque nous migrons notre projet de Windows Server vers LINUX car Linux est sensible à la casse, contrairement à Windows. 

Ainsi, sous Windows, même si vous n'écrivez pas un nom de fichier avec une majuscule, cela fonctionnera également, mais pas sous Linux.

0
Krish

Juste en ajoutant mon problème j'avais:

$this->load->model("planning/plan_model.php");

et le .php ne devrait pas être là, il aurait donc dû être:

$this->load->model("planning/plan_model");

espérons que cela aide quelqu'un

0
Frank Conry

Assure-toi:

  1. Première lettre en majuscule
  2. Nom de classe Nom exact comme nom de fichier 
  3. Assurez-vous que votre fichier se termine par l'extension .php

Dans mon cas, j'avais 1 et 2 corrects mais j'ai oublié de nommer mon fichier avec l'extension .php. Comment j'ai oublié, aucune idée mais cela m'a certainement donné du mal à essayer de comprendre le problème

0
theTypan