📜  CodeIgniter挂钩

📅  最后修改于: 2021-01-01 03:29:44             🧑  作者: Mango

CodeIgniter挂钩

在CodeIgniter中,挂钩是可以在程序执行之前和之后调用的事件。它允许在CodeIgniter执行过程中执行具有特定路径的脚本,而无需修改核心文件。例如,它可用于需要在执行控制器之前检查用户是否已登录的地方。使用钩子将节省您多次编写代码的时间。

CodeIgniter中有两个挂钩文件。一个是application / config / hooks.php文件夹,另一个是application / hooks文件夹。

换句话说,如果要在每次加载控制器构造函数后都运行代码,则可以在钩子中指定该脚本路径。

启用挂钩

要启用挂钩,请转到application / config / config.php文件并将其设置为TRUE,如下所示。

$config['enable_hooks'] = TRUE;

定义一个挂钩

挂钩可以在application / config / hooks.php文件中定义。每个挂钩被定义为一个由以下术语组成的数组。

$hook['pre_controller'] = array(
            'class' => 'Classname',
            'function' => 'functionname',
            'filename' => 'filename.php',
            'filepath' => 'hooks',
            'params' => array('element1', 'element2', 'element3')
            );

-在这里,就不得不提到在hooks.php文件中定义的类的名称。如果您使用过程函数而不是类,请将其留空。

函数-提及您正在调用的函数名称。

filename-application / hooks文件夹中创建的文件名,其中包含上述的类和函数名。

文件路径-在这里您必须提及包含脚本的目录的名称。您的脚本必须位于应用程序文件夹内。如果您的脚本位于application / hooks文件夹中,那么您的路径将仅仅是钩子。但是,如果您的脚本位于application / hooks / office文件夹中,则您的路径将为hooks / office。

params-它包含您要在脚本中传递的参数,并且是可选的。

多次呼叫同一个挂钩

您可以使用多维数组来通过多个脚本使用同一挂钩点。

$hook['pre_controller'][] = array(
                    'class' => 'Classname1',
                    'function' => 'functionname1',
                    'filename' => 'filename1.php',
                    'filepath' => 'hooks',
                    'params' => array('element1', 'element2', 'element3')
                    );

 $hook['pre_controller'][] = array(
                    'class' => 'Classname2',
                    'function' => 'functionname2',
                    'filename' => 'filename2.php',
                    'filepath' => 'hooks',
                    'params' => array('element4', 'element5', 'element6')
                    );

括号[]使您可以在多个脚本中使用相同的挂钩点。您的执行顺序将与定义的数组相同。

挂钩点

挂钩点列表如下所示。

  • 系统前
  • 在系统执行之前就调用了它。此时,仅基准和钩子类已加载。

  • 前置控制器
  • 在调用控制器之前立即调用它。至此,所有的类,安全检查和路由都已完成。

  • post_controller_constructo
  • 在控制器启动之后但在任何方法调用之前立即调用它。

  • 后控制器
  • 控制器完全执行后立即调用。

  • display_override
  • 它用于在文件执行结束时发送最终页面。

  • cache_override
  • 它使您可以在输出类中调用自己的函数。

  • 后系统
  • 在系统执行结束时将最终页面发送到浏览器之后,将调用该方法。

挂钩示例

1)首先,如上所述,在您的CodeIgniter文件夹中启用该挂钩。

2)在application / controller文件夹中创建一个Controller文件example.php

使用网址运行上述程序时,

http://localhost/hooks/index.php/example ,将出现以下输出。

3)在application / hooks文件夹中创建一个钩子文件exm.php。


4)现在,您必须在application / config / hooks文件夹中定义钩子。

 'Exm',
        'function' => 'tut',
        'filename' => 'exm.php',
        'filepath' => 'hooks',
        );
?>

5)现在,再次使用相同的URL运行程序,然后查看结果。