it-swarm.com.ru

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'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 {

....
36
Alexandre Bolduc

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

}

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

59
Repox

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

Logon_model.php

55
jakentus

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

    <?php
    class Logon_model extends CI_Model {

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

    function myFunc()
    {
      // do something
    }
}

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

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

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

обратите внимание все строчные.

8
wclark

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

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

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

5
Gabriel Glauber

В 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

4
ialbescu

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

Ваш модельный класс будет 

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

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

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

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

3
Avnish alok

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

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

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

    class Logon_model extends CI_Model

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

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

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

2
Atul O Holic

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

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

а также:

class Logon_model extends CI_Model {
...

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

2
Jonathan Ratliff

У меня возникла та же проблема, но я исправил ее, изменив файл application/config/rout.php.

Я произвел некоторую реструктуризацию в своих каталогах контроллеров и забыл применить ее к файлу маршрутов.

Ранее:

$route['application/apply'] = 'ex/application/account/create';

и сейчас:

$route['application/apply'] = 'application/account/create'; 

1
Suleiman Umar

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

common_model.php

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

Common_model.php
1
sandeep kumar

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

1
user3642940

Измените имя файла модели, начните с заглавной буквы, например: Logon_model.php

Это происходит, когда мы переносим наш проект с сервера Windows на сервер LINUX, потому что linux чувствителен к регистру, а Windows - нет. 

Таким образом, в Windows, даже если имя файла не пишется в верхнем регистре, он также будет работать нормально, но не в Linux.

0
Krish

Просто добавив мою проблему, я имел:

$this->load->model("planning/plan_model.php");

и .php не должно быть там, поэтому должно было быть:

$this->load->model("planning/plan_model");

надеюсь, это поможет кому-то

0
Frank Conry

Удостовериться:

  1. Первая буква в верхнем регистре
  2. Имя класса точное имя как имя файла 
  3. Убедитесь, что ваш файл заканчивается расширением .php

В моем случае у меня были правильные значения 1 и 2, но я забыл назвать свой файл с расширением .php. Как я забыл, понятия не имею, но это, конечно, доставило мне много времени, пытаясь разобраться в проблеме.

0
theTypan