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 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 {
....
Ответы
Ответ 1
При создании моделей вам нужно поместить файл в 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
Если вы видите текст Нет прямого script доступа разрешен, это означает, что вы попали в правый файл (если у вас есть сомнения, попробуйте записать что-то еще в exit() в первой строке).
Во-вторых, для загрузки модели в контроллеры вы должны сделать следующее:
public function index()
{
$this->load->model('logon_model');
...
}
Если все вышеперечисленное проверено как ожидалось, я бы начал искать разрешения на файл и/или, возможно, символические ссылки, если вы используете их.
Ответ 2
Я использую codeigniter 3+. У меня была та же проблема, и в моем случае я изменил имя файла модели, начиная с case upper.
Logon_model.php
Ответ 3
Вот как должна выглядеть модель: убедитесь, что у вас такое.
<?php
class Logon_model extends CI_Model {
function __construct()
{
parent::__construct();
}
function myFunc()
{
// do something
}
}
обратите внимание на имя класса верхнего регистра.
Для загрузки используйте:
$this->load->model('logon_model');
отметить все строчные буквы.
Ответ 4
Я разрешаю это следующим образом:
- Я переименовываю файл do Page_model.php
- Имя класса для Page_model extends...
- Я вызываю autoload:
$autoload['model'] = array('Page_model'=>'page');
Прекрасно работает. Надеюсь, помощь.
Ответ 5
В 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
Ответ 6
Первая буква имени файла и имени класса должна быть в верхнем регистре.
Ваш класс модели будет
класс Logon_model расширяет CI_Model
и имя файла будет Logon_model.php
Получите доступ к нему из вашего контоллера, например
$this- > load- > модель ( 'Logon_model');
Ответ 7
Модели должны быть названы и вызываться с первой буквой имени модели, а остальные в нижнем регистре.
Например: $this->load->model('Logon_model');
и
class Logon_model extends CI_Model {
...
Но вы правы в имени файла.
Ответ 8
Добавляя к ответу @jakentus, ниже я работал у меня:
-
Измените имя файла в пакете моделей на Logon_model.php
(верхний регистр первой буквы, как правильно сказал @jakentus)
-
Измените имя класса так же, как имя файла i.e.
class Logon_model extends CI_Model
-
Измените имя в методе загрузки также как
$this->load->model('Logon_model');
Надеюсь, это поможет. Счастливое кодирование.:)
Ответ 9
У меня возникла такая же проблема, но я исправил ее, изменив файл моего приложения /config/routes.php.
Я сделал некоторую реструктуризацию в своих каталогах контроллеров и забыл использовать ее в файле маршрутов.
Ранее:
$route['application/apply'] = 'ex/application/account/create';
и теперь:
$route['application/apply'] = 'application/account/create';
Ответ 10
Изменение имени имени модели, начиная с работы верхнего уровня.
Пример: Login_model.php вместо login_model.php
Ответ 11
вы должны изменить название своей первой буквы.
в localhost маленькое письмо работает нормально, но онлайн это не работает. для exa:
common_model.php
заменил его на
common_model.php
Ответ 12
Просто добавив мою проблему, я:
$this->load->model("planning/plan_model.php");
и .php
не должно быть там, поэтому должно было быть:
$this->load->model("planning/plan_model");
надеюсь, что это поможет кому-то
Ответ 13
Убедитесь, что:
- Первая буква в верхнем регистре
- Имя имени класса как имя файла
- Убедитесь, что ваш файл заканчивается расширением .php
В моем случае у меня было 1 и 2 правильно, но забыл назвать мой файл расширением .php. Как я забыл, не знаю, но это, конечно, дало мне трудное время, чтобы понять проблему.
Ответ 14
Измените имя файла модели, начните с заглавной буквы, например: Logon_model.php
Это происходит, когда мы переносим наш проект с сервера Windows на сервер LINUX, потому что linux чувствителен к регистру, а Windows - нет.
Таким образом, в Windows, даже если имя файла не пишется в верхнем регистре, он также будет работать нормально, но не в Linux.