pre_controller 钩子不会加载像 docs state 这样的基类?

2024-04-11

根据此处的 Codeigniter 文档:http://ellislab.com/codeigniter/user-guide/general/hooks.html http://ellislab.com/codeigniter/user-guide/general/hooks.html它指出:

预控制器 在调用任何控制器之前立即调用。所有基类、路由和安全检查都已完成。

但是,如果我创建一个钩子 pre_controller 钩子:

$hook['pre_controller'][] = array(
'class'    => 'tester',
'function' => 'test',
'filename' => 'tester.php',
'filepath' => 'models',
//'params'   => array('beer', 'wine', 'snacks')
);

文件 tester.php 是:

class tester extends CI_Model
{
  public function __construct()
  {
    parent::__construct();

    $this->load->library('migration');
  }

  public function test()
  {
    echo "hi";
    exit;
  }
}

我收到此错误:

Fatal error: Class 'CI_Model' not found in ******.php

为什么没有加载CI_Model?如果我放一个 require_once('system/core/Model.php');在 pre_controller 定义上方的 hooks.php 文件中,我收到以下错误:

Fatal error: Call to a member function library() on a non-object in ****.php

因为它实际上并没有加载CI_Model,函数如图书馆()行不通。我怎样才能强制它引导CI_Model.

第一个说“Use post_controller_constructor“将被拍摄,因为这不能回答问题。我需要它在运行控制器类中的任何构造函数之前加载它。我需要访问权限来扩展CI_Model类来自预控制器 hook.


简而言之,CodeIgniter 并没有按照您想要的方式工作。在您尝试访问模型的阶段,CodeIgniter 尚未加载所需的类,并且该类不可用。根据您想要实现的目标,可能还有另一种方法可以实现这一目标 - 不使用钩子/使用稍后的钩子?

Viewing /system/core/CodeIgniter.php将显示每个钩子何时被调用以及何时执行其他任务;加载路由、加载全局函数等。

如果你坚持使用这个钩子,那么你可以添加这个:load_class('Model', 'core');在模型文件的顶部(在声明类之前),但这将是一个非常肮脏的修复。

确保您的类名称遵循正确的命名约定 -tester应该Tester.


编辑:由于您希望在每次调用时运行相同的代码(假设每次控制器调用),这是一个可能的解决方案:

扩展核心控制器,并使用这个新控制器作为所有其他控制器的基本控制器(因为它们将共享相同的功能)。在此新基本控制器的构造函数中,添加您想要在每次调用时运行的功能。此构造函数中的代码将在任何控制器中的任何其他代码之前被调用。

创建以下文件,application/core/MY_Controller.php.

class MY_Controller extends CI_Controller {
    function __construct()
    {
        parent::__construct();
        // Do whatever you want - load a model, call a function...
    }
}

扩展每个控制器application/controllers, with MY_Controller, 而不是CI_Controller.

class Welcome extends MY_Controller {
    function __construct()
    {
        parent::__construct();
    }
    // Your controllers other functions...
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

pre_controller 钩子不会加载像 docs state 这样的基类? 的相关文章

  • CodeIgniter 配置文件国际化?

    我正在尝试做类似的事情 config first link lang pagination first link config prev link lang pagination prev link config next link lan
  • 在 CodeIgniter 中上传多个文件

    在我的 CodeIgniter 项目中 我在项目创建期间上传文件 这是上传功能 function uploadFiles this gt load gt library upload error 0 projectName POST pro
  • Codeigniter 活动记录选择、左连接、计数

    我有一个显示数据库查询结果的表单 这些结果可以有许多其他资产与之相连 我想找到一种方法来显示每个元素有多少资产 例如 我的表是英格兰地区 另一个表是用户居住的地方 我当前有这个代码 this gt db gt select this gt
  • 无法加载请求的类:会话

    我的配置文件看起来像这样 gt config sess cookie name ci session config sess expiration 7200 config sess expire on close TRUE config s
  • 用于阻止大于 20MB 的提交的预提交挂钩

    是否可以为 SVN 1 8 编写 prcommit 挂钩以避免提交大于 20MB 的文件 任何建议 将不胜感激 谢谢 我尝试过 但这不适用于二进制文件或其他文件扩展名 filesize SVNLOOK cat t TXN REPOS f w
  • Mercurial hook 的操作类似于“changegroup”,但仅在推送时?

    我们已经构建了一个变更集传播机制 但它依赖于捆绑和解除捆绑新变更集 如果我们要使用changegroup钩子 那么它会导致循环行为 因为钩子是运行的在拉 推或解绑期间 http mercurial selenic com wiki Hook
  • 全局键盘挂钩的合法用途是什么?

    除了仅应由操作系统提供的应用程序启动快捷方式之外 Windows 键盘挂钩等东西的合法用途是什么 在我看来 我们只在键盘记录器之类的事情上遇到问题 因为操作系统提供了钩子来执行除操作系统内核本身之外的任何情况下任何人都不允许执行的操作 编辑
  • Codeigniter 中的 HTML 格式的电子邮件

    如何在 codeigniter 中发送格式化的电子邮件 我有这段代码 可以很好地发送电子邮件 但它没有按应有的方式格式化它 您可以看到显示收到电子邮件的图片 function email sender this gt load gt hel
  • 使用主题函数在 body 标记后插入代码

    我试图在开头添加一段代码everyDrupal 站点中的页面 因为我有不止一个page模板 我想以编程方式执行此操作 但没有成功 我还是个新手 虽然我了解了钩子 主题函数等的要点 但我只是想不出实现这一目标的正确方法 到目前为止我已经覆盖了
  • stdClass 类的对象无法转换为字符串

    我现在在使用 PHP 时遇到问题 收到此错误 Object of class stdClass could not be converted to string当我在我的网站中运行这部分代码时发生错误 function myaccount
  • codeigniter core/model.php 未定义属性

    我从未接触过 model php 文件 但是我收到了此错误 Jobprocess 是我的控制器 lastname是在其中正确分配的变量 我不知道为什么会出现这个错误 这是使用 codeigniter 框架 Message Undefined
  • idn_to_ascii():INTL_IDNA_VARIANT_2003 已弃用

    我正在为我的网站使用 codeigniter 框架 但在 form validation 中我收到错误 我按照 stackoverflow 中的此链接操作 但它对我不起作用 跟随链接 5 2 17 中的 idn to ascii https
  • Codeigniter:无法使用提供的设置连接到数据库服务器

    我使用 codeigniter 作为 cms 框架 如果数据库主机名是 localhost 它可以正常工作 db default hostname localhost db default username root db default
  • jquery javascript 在 codeigniter 中不起作用

    大家好 感恩节快乐 我在将此脚本包含在 codeigniter 中时遇到一些问题
  • 低级键盘钩子不在 UI 线程上

    我想为键盘挂钩创建一个好的库 我使用 SetWindowsHookEx 方法 我注意到如果我的应用程序的主线程繁忙 则应在任何系统 KeyDown 事件中调用的方法 hookProc 不会执行 我认为钩子应该这样制作 以便另一个线程负责它
  • git 预提交钩子格式代码 - Intellij/Android Studio

    本要点展示了如何在预提交时使用 Eclipse 格式化程序自动格式化 Java 代码 Source https gist github com ktoso 708972 https gist github com ktoso 708972
  • 使用控制器通过 codeigniter 处理返回的自定义 css 和 javascript 文件

    我正在开发一个 php codeigniter 项目 我正在考虑创建一个专门用于处理返回自定义 css 和 javascript 文件的控制器 在之前的项目中 我在视图文件的标头中包含了外部 CSS 和 JS 文件 但它们本质上必须是静态的
  • 上游太大 - nginx + codeigniter

    我从 Nginx 收到此错误 但似乎无法弄清楚 我正在使用 codeigniter 并使用数据库进行会话 所以我想知道标题怎么会太大 有没有办法检查标题是什么 或者看看我能做些什么来修复这个错误 如果您需要我提供任何conf文件或其他文件
  • 如何在 codeigniter 查询中使用 FIND_IN_SET?

    array array classesID gt 6 this gt db gt select gt from this gt table name gt where array gt order by this gt order by q
  • 如何从进程开始捕获所有应用程序/窗口消息? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我试图弄清楚如何捕获进程 窗口的所有窗口消息 从它在 c 中启动时开始 该过程不是我自己的 所以我需要使用某种钩子 我的目标是开始实时

随机推荐