CodeIgniter 4:Define/include "globally available" 数组和函数

CodeIgniter 4: Define/include "globally available" arrays and functions

我想定义一些我可以在所有 controllers/models/views(在 codeigniter 4 中)中“全局”访问的数组和函数。 例如,我需要定义一个可用货币数组:

$currencies = array("EUR","USD"); 

还有一些功能,例如根据用户国家/地区不同显示数字,因为有些使用小数点或逗号。

我应该把这些数组和函数放在哪里以及如何包含它们以便它们在所有 controllers/models/views 中可用?

我研究过你可以在 app/config/Constants.php 中定义常量,但它似乎不是数组和函数的地方。

我会在这里尝试将事实与观点分开。

...define some arrays and functions that I can access "globally" in all controllers/models/views...

  1. 使用继承 - 您可以创建 'base' class 控制器和模型的扩展;这些 'base' class 扩展 CodeIgniter 的 控制器或模型,并在所有 您的 控制器或型号。

    您创建的扩展其各自 'base' class 的每个控制器或模型都可以访问您在 'base' class 中定义的任何内容(非私有) .

  2. 使用命名空间——事实上,这就是它的力量。如果您真的需要可以从“任何地方”访问的东西,请创建一个库或类似的东西。只要它在定义的命名空间内,它是什么并不重要。

    然后当你需要使用这个库(或其他)时,你创建一个实例并使用它。如果您不想实际创建对象,您甚至可以使用静态成员。

  3. 使用 'Helpers'- 要保持程序性,您可以 extend the functionality of existing CI4 Helpers or even create your own。您也可以在此找到其他资源。

...you can define constants in app/config/Constants.php but it doesn't seem to be the place for arrays and functions.

Constants.php 中定义数组常量是可以的,只要您实际上是在定义一个常量; $currencies = array("EUR","USD"); 不是常数。

但是,您对该文件中的函数的看法是正确的;你不应该那样做。


基于普遍(或多或少)共识的快速观点:

控制器的目的是正确路由请求;视图的目的(广义上讲)是呈现网页。这些都不是真正执行任何业务逻辑的地方;因此流行语“胖模型,瘦控制器”。

如果您认为需要访问或执行模型外部的业务逻辑,请停下来问问自己为什么模型层中没有发生这种情况。