CodeIgniter PHP Model Access "Невозможно найти указанную модель" - PullRequest
37 голосов
/ 10 ноября 2011

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

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 {

....

Ответы [ 14 ]

61 голосов
/ 10 ноября 2011

При создании моделей вам нужно поместить файл в 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');
    ...

}

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

57 голосов
/ 19 марта 2015

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

Logon_model.php

8 голосов
/ 10 ноября 2011

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

    <?php
    class Logon_model extends CI_Model {

    function __construct()
    {
         parent::__construct();
    }

    function myFunc()
    {
      // do something
    }
}

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

Для загрузки используйте:

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

отметить все строчные буквы.

5 голосов
/ 24 августа 2015

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

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

Работает нормально .. Надеюсь, поможет.

4 голосов
/ 26 марта 2014

В 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

3 голосов
/ 17 июня 2016

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

Ваш класс модели будет

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

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

Доступ к нему из вашего контроллера, как

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

2 голосов
/ 08 апреля 2016

Добавление к ответу @jakentus, вот что мне помогло:

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

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

    class Logon_model extends CI_Model

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

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

Надеюсь, это поможет.Удачного кодирования.:)

2 голосов
/ 10 ноября 2011

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

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

и

class Logon_model extends CI_Model {
...

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

1 голос
/ 01 мая 2017

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

common_model.php

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

Common_model.php
1 голос
/ 21 ноября 2016

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...