【问题标题】:In Codeigniter 2, how do I load a library into a global variable I can use in helper functions?在 Codeigniter 2 中,如何将库加载到可以在辅助函数中使用的全局变量中?
【发布时间】:2017-01-22 00:45:15
【问题描述】:

所以我有以下文件:

库/foo_library.php

helpers/foo_helper.php

views/main.php

现在我的问题: 我创建的库将在每次页面加载时使用数百次,因为它用于确定语言并根据数据库中存储的语言返回正确的项目。

<?=$this->foo_library->language('English');?>

现在以这种方式使用它可以正常工作,但由于我将在视图中将其用于其他语言操作,因此我创建了一些辅助函数以使视图看起来更清晰

<?=sl('English words','Other language words')?>

现在这在一定程度上确实有效,尽管 帮助程序最终会在每次运行函数时从库中创建一个新对象(基本上使用 $CI =& get_instance() 方法来调用图书馆)。

这是一个问题,因为当您创建库时,它会将数据保存到内存中,因此不需要继续查询数据库。所以当对象被一遍又一遍地重新创建时,它完全违背了目的

所以我想知道,有没有什么干净的方法可以让我创建一个可以在项目的任何地方使用的库对象,包括辅助函数,并保持它的持久性? (该库确实使用 CI 中的 db builder 类

【问题讨论】:

    标签: php codeigniter


    【解决方案1】:

    您可以在 Codeigniter 上自动加载一些元素,以便全局访问它们

    以下项目可以自动加载:

    在 library/ 目录中找到的类 Helper 文件在 helpers/ 目录 在 config/ 目录中找到的自定义配置文件 在 system/language/ 目录中找到的语言文件 Models found in 模型/文件夹

    Autoloader

    【讨论】:

    • 我试过了,虽然从视图调用辅助函数时,它仍然每次都重新创建实际的库对象,但我不知道为什么。我还必须在函数中做 get_instance() 的事情,即使有人认为它仍然是从视图中加载的:(
    • 我唯一能想到的就是使用某种依赖注入或 IOC 系统来实现 codeigniter。目的是重用对象。我真的认为自动加载器会在某些方面为您做到这一点。
    • 依赖注入不是一个坏主意,可能需要创建一个对象来做到这一点,所以我最终会像 5 个对象一样进入库,但是是的,会看到我可以做什么。谢谢
    猜你喜欢
    • 1970-01-01
    • 2017-06-06
    • 2023-03-25
    • 2022-09-29
    • 1970-01-01
    • 2014-03-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多