CodeIgniter Доступ к PHP-модели «Не удалось найти указанную модель»

Я пытаюсь загрузить некоторые модели для этого веб-сайта, который я создаю. Однако, по неизвестной причине, это приведет к следующей ошибке:

An Error Was Encountered Unable to locate the model you have specified: logon_model 

Теперь я сделал свое исследование. Проблема в том, что IC обрабатывает имена файлов в нижнем регистре. Тем не менее, как мой файл, так и вызов файла находятся в нижнем регистре, как показано ниже:

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

Выполнение не достигает «НАЙДЕННОЙ МОДЕЛИ», поэтому останавливается на загрузке модели. Я попытался использовать:

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

Без результатов. Нужно упомянуть, что файл модели правильно помещен в нужную папку модели?

Как я могу это исправить ?

EDIT: заголовок для файла модели:

 class Logon_model extends CI_Model { .... 

При создании моделей вам необходимо поместить файл в application/models/ и назвать файл в любом нижнем регистре – например logon_model.php

logon_model.php должен содержать следующее:

 <?php if ( ! defined('BASEPATH')) exit('No direct script access allowed'); class Logon_model extends CI_Model { public function __construct() { parent::__construct(); } ... 

Теперь, что вы можете сделать, чтобы проверить, доступна ли ваша модель приложения, попробуйте открыть ее в браузере – например:
http://example.org/application/models/logon_model.php

Если вы видите текст, доступный для прямого доступа к скрипту, это означает, что вы попали в нужный файл (если у вас есть сомнения, попробуйте записать что-то еще в exit () в первой строке).

Во-вторых, для загрузки модели в контроллеры вы должны сделать следующее:

 public function index() { $this->load->model('logon_model'); ... } 

Если все вышеперечисленное проверяется как ожидалось, я бы начал искать разрешения на файл и / или, возможно, символические ссылки, если вы используете их.

Я использую codeigniter 3+. У меня была та же проблема, и в моем случае я изменил имя файла модели, начиная с случая с аппсером.

Logon_model.php

Вот как должна выглядеть модель: убедитесь, что у вас такое.

  <?php class Logon_model extends CI_Model { function __construct() { parent::__construct(); } function myFunc() { // do something } } 

обратите внимание на имя класса верхнего регистра.

Чтобы загрузить его, используйте:

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

примечание все нижний.

Я разрешаю это следующим образом:

  1. Я переименовываю файл do Page_model.php
  2. Имя класса для Page_model продолжается …
  3. Я вызываю autoload: $autoload['model'] = array('Page_model'=>'page');

Прекрасно работает. Надеюсь, помощь.

В CodeIgniter 3.0-dev (получить его из github) это не работает, потому что CI является поиском в качестве первой буквы в верхнем регистре.

Вы можете найти код на строке system / core / Loader.php 282 или ниже:

 $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; } 

Это означает, что нам нужно создать файл со следующим именем в приложении / models / Logon_mode.php

Модели должны быть названы и вызываться с первой буквой названия модели, а остальные в нижнем регистре.

Например: $this->load->model('Logon_model');

а также:

 class Logon_model extends CI_Model { ... 

Но вы правы в имени файла.

Первая буква имени файла и имени класса должна быть в верхнем регистре.

Класс модели будет

класс Logon_model расширяет CI_Model

и имя файла будет Logon_model.php

Получите доступ к нему из вашего

$ This-> load-> модель ( 'Logon_model');

Добавляя к ответу @jakentus ниже, это то, что сработало для меня:

  1. Измените имя файла в пакете моделей на Logon_model.php (верхний регистр первой буквы, как правильно сказал @jakentus)

  2. Измените имя класса так же, как имя файла, т.е.

    class Logon_model extends CI_Model

  3. Измените имя в методе загрузки также как

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

Надеюсь это поможет. Счастливое кодирование. 🙂

У меня возникла та же проблема, но я исправил ее, изменив файл application / config / routes.php.

Я сделал некоторую реструктуризацию в своих каталогах контроллеров и забыл использовать ее в файле маршрутов.

Ранее:

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

и сейчас:

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

Изменение имени названия модели, начиная с работы верхнего уровня. Пример: Login_model.php вместо login_model.php

вы должны изменить название своей столицы имени первой буквы. в localhost маленькое письмо работает нормально, но онлайн это не работает. для exa:

 common_model.php 

заменил его на

 Common_model.php 

Просто добавив мою проблему:

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

и .php не должен быть там, поэтому он должен был быть:

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

надеюсь, это поможет кому-то