CodeIgniter 3.1.7- Как я могу использовать пользовательские классы Entity? [Дубликат]

Это означает, что вы пытаетесь манипулировать тем, что имеет ссылку, но еще не инициализировано. Первое, что нужно сделать, это проверить каждый созданный экземпляр. Используйте контрольные точки, часы, проверяйте свои значения varibale. Следить за трассировкой стека и искать точные строки и столбцы, которые создают проблему

7
задан networkprofile 10 September 2010 в 02:59
поделиться

3 ответа

Я обычно делаю это:

1.- создайте классы сущности в / system / application / classes

class MyEntity {
}

2. определите константу, указывающую на эту папку on /system/application/config/constants.php

define('CLASSES_DIR', APPPATH . "classes/");

3.- включить классы объектов из моделей:

require_once(CLASSES_DIR  . "MyEntity.php");

class MyModel extends Model {

   function test() {
      $entity = new MyEntity();
      $entity->doSomeStuff();
   }

}

Это не нарушит вашу структуру mvc , и сохраняет для классов объектов раздельно. Надеюсь, что это поможет!

11
ответ дан ilbesculpi 22 August 2018 в 23:42
поделиться

Модели CodeIgniter используют одноэлементный шаблон. Вы можете создавать библиотеки или использовать $ foo = new Some_Model, если хотите, помните, что все это просто PHP:)

1
ответ дан Phil Sturgeon 22 August 2018 в 23:42
поделиться
  • 1
    Не работает, если вы хотите, скажем, список продуктов. Все, что вы делаете, это создание коллекции функций. – DisgruntledGoat 14 September 2010 в 10:55
  • 2
    – Phil Sturgeon 14 September 2010 в 14:11

Мне понравилось решение @ ilbesculpi, но я немного настроил его, используя пространство имен, вместо использования константы и require_once. Вот моя версия:

1) Создайте классы объектов в /system/application/entities.

namespace MyApplication\Entities;

class ArticlesEntity
{
    function doSomeStuff()
    {
        // Your code here...
    }
}

2) Включите мой класс сущности в мою модель с помощью using утверждение.

use MyApplication\Entities\ArticlesEntity;

class ArticlesModel extends CI_Model
{
    function test() 
    {
      $entity = new ArticlesEntity();
      $ArticlesEntity->doSomeStuff();
    }
}
2
ответ дан Tod Birdsall 22 August 2018 в 23:42
поделиться
  • 1
    На мой взгляд, это более элегантное решение. Тем не менее, я думаю, что ему нужен какой-то механизм автозагрузки, такой как PSR-4. – beawolf 10 August 2016 в 08:39
Другие вопросы по тегам:

Похожие вопросы: