#php #model #codeigniter-2
#php #Модель #codeigniter-2
Вопрос:
Я пытался загрузить некоторые модели для этого веб-сайта, который я создаю. Однако по неизвестной причине это приведет к следующей ошибке :
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'));
Безрезультатно. Нужно упомянуть, что файл модели правильно размещен в нужной папке модели?
Как я могу это исправить?
РЕДАКТИРОВАТЬ: Заголовок для файла модели :
class Logon_model extends CI_Model {
....
Комментарии:
1. Кроме того, это logon_model, а не login_model, верно? В противном случае смотрите ответ wclark
2. @Kai Qing Это все logon_model
3. Убедитесь, что класс модели и имя файла совпадают, и только первая буква должна быть заглавной, например, «Model_user»
Ответ №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
Если вы видите текст Прямой доступ к скрипту не разрешен, это означает, что вы попали в нужный файл (если вы сомневаетесь, попробуйте написать что-нибудь еще в exit() в первой строке).
Во-вторых, для загрузки модели в ваши контроллеры вы должны быть в состоянии сделать следующее:
public function index()
{
$this->load->model('logon_model');
...
}
Если все вышеперечисленное выполняется так, как ожидалось, я бы начал просматривать права доступа к файлам и / или, возможно, символические ссылки, если вы используете какие-либо.
Комментарии:
1. Имя файла php должно соответствовать имени класса, а первый символ класса должен быть заглавным. Таким образом, вы должны поместить класс Logon_model в Logon_model.php . Чувствительность к регистру в имени файла не является проблемой, если вы используете Windows, но это будет в Linux.
2. Для меня это работает локально, но на веб-сервере (cpanel). Мне также нужно было переименовать файл модели ЗАГЛАВНЫМИ буквами, т.Е. (Logon_model.php согласно этому примеру)
Ответ №2:
Я использую codeigniter 3 . У меня была такая же проблема, и в моем случае я изменил имя файла модели, начиная с верхнего регистра.
Logon_model.php
Комментарии:
1. То же самое. Я использую Codeigniter 3.0, и мне нужно было назвать файл в папке модели из ‘test_model.php ‘ в ‘Test_model_php’.
2. Хочу отметить, что заглавная буква требуется только в системах на базе unix, таких как Linux и mac osx. в Windows, начинающаяся с буквы un в нижнем регистре, работает нормально.
Ответ №3:
Вот как должна выглядеть модель: убедитесь, что ваша модель похожа на эту.
<?php
class Logon_model extends CI_Model {
function __construct()
{
parent::__construct();
}
function myFunc()
{
// do something
}
}
обратите внимание на название класса в верхнем регистре.
Для загрузки используйте:
$this->load->model('logon_model');
обратите внимание на все строчные буквы.
Комментарии:
1. Я добавил заголовок, проверьте его
Ответ №4:
Я решаю это следующим образом:
- Я переименовываю файл, чтобы Page_model.php
- Имя класса для Page_model расширяется…
- Я вызываю автозагрузку:
$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;
}
Это означает, что нам нужно создать файл со следующим именем на application/models/Logon_mode.php
Ответ №6:
Первая буква имени файла и имени класса должны быть в верхнем регистре.
Ваш класс модели будет
класс Logon_model расширяет CI_Model
и имя файла будет Logon_model.php
Получите доступ к ней из вашего контроллера, например
$this->load->model(‘Logon_model’);
Ответ №7:
Добавляя к ответу @jakentus, ниже приведено то, что сработало для меня:
-
Измените имя файла в пакете models на
Logon_model.php
(Первая буква в верхнем регистре, как правильно сказал @jakentus) -
Измените имя класса на то же, что и имя файла, т.е.
class Logon_model extends CI_Model
-
Измените имя в методе load также как
$this->load->model('Logon_model');
Надеюсь, это поможет. Удачного кодирования. 🙂
Ответ №8:
Модели должны иметь имена и вызываться с заглавной первой буквой названия модели, а остальные — в нижнем регистре.
Например: $this->load->model('Logon_model');
и:
class Logon_model extends CI_Model {
...
Но вы правы относительно имени файла.
Комментарии:
1. Я отредактировал их оба, как вы говорите, и это все еще не работает!
2. В какой именно папке находится ваша модель? Это должно быть
application/models/
и у него должно быть имяlogon_model.php
. Если все вышеуказанные условия выполнены, нет причин, по которым вы не сможете загрузить его какLogon_model
.3. Все размещено правильно, поэтому я тоже не понимаю.
4. переименовать модель в Logon_model.php
Ответ №9:
Измените имя файла вашей модели, начните с заглавной буквы, вот так: Logon_model.php
Это происходит, когда мы переносим наш проект с Windows server на LINUX server, потому что linux чувствителен к регистру, а Windows — нет.
Итак, в Windows, даже если не записывать имя файла в верхнем регистре, тогда это также будет работать нормально, но не в Linux.
Ответ №10:
Я столкнулся с той же проблемой, но я исправил ее, изменив мой application/config/routes.php файл.
Я произвел некоторую реструктуризацию в своих каталогах контроллеров и забыл внести это в файл routes.
Ранее:
$route['application/apply'] = 'ex/application/account/create';
и теперь:
$route['application/apply'] = 'application/account/create';
Ответ №11:
Изменение названия модели, начинающееся с верхнего регистра, работает. Пример: Login_model.php вместо login_model.php
Ответ №12:
вы должны изменить заглавную букву названия вашей модели. в localhost small letter работает должным образом, но в Интернете это не работает. например:
common_model.php
заменил его на
Common_model.php
Ответ №13:
Просто добавив мою проблему, у меня было:
$this->load->model("planning/plan_model.php");
и .php
там не должно быть, так что это должно было быть:
$this->load->model("planning/plan_model");
надеюсь, это кому-то поможет
Ответ №14:
Если вы используете Linux, то убедитесь, что имя вашего файла должно совпадать со строкой, переданной в методах load model в качестве первого аргумента.
$this->load->model('Order_Model','order_model');
Вы можете использовать второй аргумент, используя который вы можете вызывать методы из своей модели, и это будет работать также в Linux и Windows
$result = $this->order_model->get_order_details($orderID);
Ответ №15:
Убедитесь, что:
- Первая буква в верхнем регистре
- Имя класса точное имя в качестве имени файла
- Убедитесь, что ваш файл заканчивается расширением .php
В моем случае у меня были правильные 1 и 2, но я забыл назвать свой файл с расширением .php. Как я забыл, понятия не имею, но это, несомненно, затруднило мне попытки разобраться в проблеме
Ответ №16:
Вы можете дать любое имя, которое хотите.
Руководства по стилям — это рекомендации, а не обязательные требования.
Но вы должны позаботиться о том, чтобы везде использовать одно и то же имя.
Например, для Test_Model вы должны:
Имя класса
class Test_Model extends CI_Model
Имя файла
Test_Model.php
Загрузить модель
$this->load->model('Test_Model');
Используйте модель
$this->Test_Model
Чтобы избежать использования жестких строк кодирования, вы можете загрузить модель следующим образом:
$this->load->model(Test_Model::class);