我想定义一些可以访问的数组和函数"全球";在所有控制器/模型/视图中(在代码点火器4中(。例如,我需要定义一组可用货币:
$currencies = array("EUR","USD");
还有一些功能,例如根据用户的国家/地区显示不同的数字,因为有些功能使用小数点或逗号。
我将把这些数组和函数放在哪里?我将如何包括它们,以便它们在所有控制器/模型/视图中都可用?
我研究过你可以在app/config/constants.php中定义常量,但它似乎不是数组和函数的地方。
我将在这里尝试将事实和观点区分开来。
。。。定义一些我可以访问的数组和函数";全球";在里面所有控制器/模型/视图。。。
-
使用继承-您可以创建控制器和模型扩展的"基类";这些"基类"扩展了CodeIgniter的控制器或模型,并在所有的控制器或模型中定义了您想要的任何方法。
您创建的每个扩展其各自"基类"的控制器或模型都可以访问您在"基类"中定义的任何内容(非私有(。
-
使用名称空间-事实上,这就是它的力量。如果你真的需要一些东西,你可以从";"任何地方";,创建一个库或类似的东西。它是什么并不重要,只要它在一个定义的名称空间内即可。
然后,当你需要使用这个库(或其他什么(时,你可以创建一个实例并使用它。如果你不想真正创建一个对象,你甚至可以使用静态成员。
-
使用"帮助者"-为了保持程序性,您既可以扩展现有CI4帮助者的功能,也可以创建自己的帮助者。你也可以在这方面找到其他资源。
。。。您可以在app/config/constants.php中定义常量,但它没有似乎是放置数组和函数的地方。
在Constants.php
中定义数组常量是可以的,只要您实际定义的是一个常量;$currencies = array("EUR","USD");
不是常数。
但是,您对该文件中的函数是正确的;你不应该那样做。
基于普遍共识的快速意见:
控制器的目的是正确路由请求;Views(广义上(的目的是渲染网页。这两者都不是真正执行任何业务逻辑的地方;因此流行语";胖模特,瘦控";。
如果您认为需要访问或执行模型之外的业务逻辑,请停下来问问自己,为什么没有在模型层中发生这种情况。