Модель не загружается - проблема с именами - PullRequest
0 голосов
/ 01 июля 2019

В процессе обновления с Codeigniter 2.2 до 3.1 мы переименовали все модели.Теперь они не загружаются, если я не переделываю их под другим именем.

При просмотре многочисленных других статей часто не удается загрузить модель или опечатки в именах.Я не вижу ни одного из них, чтобы иметь место.Есть несколько моделей, у которых у всех есть эта проблема, но я нашел исправление, которое не является идеальным - создание новой модели с новым именем.Первый пример - это модель с именем PrpmsModel. Я могу взять в этом файле все, что угодно, создать новую модель с именем FooModel.php и просто изменить имя класса в файле на FooModel, а затем, когда я загружаю его и выполняю вызов, это работает.

<?php
/**
 * PRPMS - Model
**/
if (! defined('BASEPATH'))
    exit('No direct script access allowed');

class PrpmsModel extends MY_Model
{

Я вынул хвостовую часть, но только для того, чтобы увидеть верхнее определение.

$this->load->model('PrpmsModel');
$employee = $this->PrpmsModel->fetchPRPMSbyEmployeeId(1, 1);

Это не работает выше.

<?php
/**
 * Foo - Model
**/
if (! defined('BASEPATH'))
    exit('No direct script access allowed');

class FooModel extends MY_Model
{

Скопировано все из PrpmsModel.php в FooModel.php

$this->load->model('FooModel');
$employee = $this->FooModel->fetchPRPMSbyEmployeeId(1, 1);

Это выше работает.Раньше модель была prpmsModel, поэтому я просто изменил регистр.Имя файла также было изменено в соответствии с регистром PrpmsModel.

1 Ответ

0 голосов
/ 02 июля 2019

Соглашения о присвоении имен изменены между CI 2.x и CI 3.x и изложены в доступном руководстве по миграции 2.x-> 3.0 ЗДЕСЬ

с особым учетом моделей, сохраняйтеПомните, что в CI 3:

  • Имена файлов всегда должны начинаться с заглавной буквы только на первом символе (sales_model.php НЕ в порядке, равно как и SALES_MODEL.php, или Sales_Model.php. Sales_model.php В порядке)
  • Имя класса модели должно совпадать с именем файла (в предыдущем примере объявление класса должно быть Class Sales_model extends CI_Model { }
  • Модель должна быть загружена в ваш контроллер с использованием строчного имени(поэтому $this->load->model('sales_model'); ОК, а $this->load->model('Sales_model');, $this->load->model('Sales_Model'); или $this->load->model('SALES_MODEL'); - нет)

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

Поскольку вы уже просматриваете руководство по миграции 2.x-> 3.0, найдите время, чтобы просмотретьвесь документ. Многое изменилось с 2.x до 3.x, так что это определилоточно не мешало бы убедиться, что все соответствует стандартам 3.x

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