Подтвердить что ты не робот

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 {

....
4b9b3361

Ответ 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.