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')
			);

class-在这里, 你必须提及在hooks.php文件中定义的类的名称。如果你使用过程函数而不是类, 请将其留空。

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

filename-在application / hooks文件夹中创建的文件名, 包含上面提到的类和函数名。

filepath-在这里你必须提及包含脚本的目录的名称。你的脚本必须位于应用程序文件夹内。如果你的脚本位于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')
					);

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


挂钩点

挂钩点列表如下所示。

  • 系统前
  • It is called much before the system execution. Only benchmark and hook class have been loaded at this point.

  • 前置控制器
  • It is called immediately prior to your controller being called. At this point all the classes, security checks and routing have been done.

  • post_controller_constructo
  • It is called immediately after your controller is started, but before any method call.

  • 后控制器
  • It is called immediately after your controller is completely executed.

  • display_override
  • It is used to send the final page at the end of file execution.

  • cache_override
  • It enables you to call your own function in the output class.

  • 后系统
  • It is called after the final page is sent to the browser at the end of the system execution.


挂钩示例

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

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

<?php
defined('BASEPATH') OR exit('No direct script access allowed');
class Example extends CI_Controller {
public function index()
	{
		echo "CodeIgniter Tutorial";
}
}

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

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

Codeigniter钩子1

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

<?php
defined('BASEPATH') OR exit('No direct script access allowed');
class Exm extends CI_Controller {
public function tut()
	{
		echo "Welcome to srcmini. This is ";
	}
}
?>

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

<?php
defined('BASEPATH') OR exit('No direct script access allowed');

$hook['pre_controller'] = array(
		'class' => 'Exm', 'function' => 'tut', 'filename' => 'exm.php', 'filepath' => 'hooks', );
?>

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

Codeigniter钩子2
微信公众号
手机浏览(小程序)
0
分享到:
没有账号? 忘记密码?