【问题标题】:Codeigniter4 - Difference between Libraries, helper and modelCodeigniter4 - 库、助手和模型之间的区别
【发布时间】:2021-02-02 15:28:18
【问题描述】:

我在 codeigniter4 中迈出了第一步。

现在我问自己,“Model”(我首先做所有与数据库相关的事情)与“Helper”(我定义了一组函数)或“Libary”之间的最大区别是什么?

在哪些情况下我应该创建自己的库、助手、模型?

CI4 文档不会给我答案,所以我希望有人可以为我(和其他人)解释它

【问题讨论】:

    标签: codeigniter-4


    【解决方案1】:

    关于模型的文档非常直截了当,没有任何警告。模型是代表数据库中单个表的类,它为您提供了多种相关功能:内置 CRUD 方法、保存实体的能力、查询生成器方法的透明使用等。

    一般来说,您通常会为每个正在使用的数据库表创建一个 Model 类。话虽如此,you do not necessarily need Models in order to work with a database;但是,如果您希望需要模型提供的功能,则可以使用它来节省您自己做的工作。

    文档确实对库和助手之间的差异更加不透明。因此,我发现最客观的差异衡量标准在于 CodeIgniter 本身如何利用它们,并且区别相当微妙:

    库通过存在于定义它们的类的命名空间中的方法提供其功能。

    帮助程序通过存在于导入类的命名空间中的函数提供其功能。

    (注意:在 PHP 中,方法只是在类中定义的函数的名称)

    换句话说,库通常是非静态类(与所有非静态类一样)必须在使用前“构造”。该类中定义的方法驻留在类本身的命名空间中,而不是它们被调用的类。

    例如,为了访问当前 Session 对象,我检索 Session Library 类的一个实例:$session = session(); 使用 $session,然后我可以调用该 Session 类提供的方法,例如 $session->destroy()

    另一方面,Helper 通常只是导入到导入类本身的命名空间中的函数集合。它们是在当前上下文中调用的,它们的使用并不取决于对象的使用。

    例如,如果我加载了 Array Helper (helper('array');),它将允许我访问一些可以直接从当前上下文调用的函数(例如 $result = array_deep_search(...))。我不必先创建对象,该函数直接导入到我当前的命名空间中。

    这种区别可能有几个原因,其中最大的原因可能是命名冲突。如果你有两个 Helper,每个都有一个同名的函数,你不能同时导入这两个函数。另一方面,您可以有一百个不同的类,其中定义了 destroy() 方法,因为这些方法定义中的每一个都位于定义类本身的命名空间中,并通过该特定类的实例进行调用。

    您可能会注意到 CI 的所有 Helper 函数都以 Helper 本身的名称为前缀,例如“数组”或“表格”;这是为了防止前面提到的命名冲突。

    这可能无法回答何时您想要使用其中一个,事实上这真的取决于您的意见。最后,这一切都只是命名空间。你可以把东西放在任何你想要的地方,只要需要它的代码知道在哪里寻找它。我个人尝试在事情上遵循 CI 的领导,所以我倾向于遵循他们在两者之间的区别。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-04-05
      • 2013-07-13
      • 2014-11-29
      • 2015-10-01
      • 2012-06-28
      • 2019-11-13
      • 2011-01-30
      相关资源
      最近更新 更多