Я пытаюсь загрузить некоторые модели для этого веб-сайта, который я создаю. Однако, по неизвестной причине, это приведет к следующей ошибке:
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');
примечание все нижний.
Я разрешаю это следующим образом:
$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 ниже, это то, что сработало для меня:
Измените имя файла в пакете моделей на Logon_model.php
(верхний регистр первой буквы, как правильно сказал @jakentus)
Измените имя класса так же, как имя файла, т.е.
class Logon_model extends CI_Model
Измените имя в методе загрузки также как
$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");
надеюсь, это поможет кому-то