【问题标题】:codeigniter: where do entities go?codeigniter:实体去哪儿了?
【发布时间】:2011-04-10 13:23:58
【问题描述】:

我想知道我应该如何处理我的实体?例如,一个名为 Articles 的类,具有一些数据成员(名称/标题/日期)和 getter 和 setter。我可以将这些添加到我的文章数据成员中,但最好将它们分开。那你怎么看?

谢谢!

【问题讨论】:

  • 您所说的“我可以将这些添加到我的文章数据成员中,但最好将它们分开”是什么意思?我想你应该从模型类(codeigniter.com/user_guide/general/models.html)扩展你的文章类并继续。
  • 我的意思是向模型中添加数据成员,就像在示例中一样,但是分离实体不是更好吗?
  • 你能解释一下你所说的“实体”是什么意思吗?
  • 具有数据成员和 getter 和 setter 的类(仅限)
  • 听起来你在谈论 CodeIgniter 在模型-视图-控制器范式中认为什么是“模型”

标签: php model-view-controller codeigniter entities


【解决方案1】:

我喜欢@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】:

我通常这样做:

1.- 在 /system/application/classes 中创建我的实体类

class MyEntity {
}

2.- 在 /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 结构,并保持实体类分开。希望对您有所帮助!

【讨论】:

【解决方案3】:

CodeIgniter 模型使用单例模式。如果你愿意,你可以创建库或使用 $foo = new Some_Model,记住这只是 PHP :)

【讨论】:

  • 如果你想要一个产品列表,它就不能很好地工作。您所做的只是创建一个函数集合。
  • 对,CodeIgniter 模型通常是愚蠢的、瘦的、单例的。但是你可以使用普通的旧 PHP 做任何你喜欢的事情。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-03-03
  • 2014-03-15
  • 2015-07-17
  • 2012-10-30
  • 2013-05-23
  • 1970-01-01
  • 2012-03-13
相关资源
最近更新 更多