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 {
....
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.
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
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.
Je résous cela de cette façon:
$autoload['model'] = array('Page_model'=>'page');
Fonctionne bien .. J'espère aider.
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.
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');
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.
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';
vous devez modifier votre nom de modèle première lettre majuscule . pour exa:
common_model.php
l'a remplacé pour
Common_model.php
Changer le nom du modèle commençant par Uppercase fonctionne. Exemple: Login_model.php au lieu de login_model.php
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.
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
Assure-toi:
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