Wallogit.com
2017 © Pedro Peláez
This is a CodeIgniter hook.
相信真正深层用过CodeIgniter框架钩子功能的开发者们都会发现一个问题,就是在控制器中调用钩子的时候,是不能够传递参数的,这极大地影响了业务正常逻辑,阻碍了应用程序与扩展程序之间的信息传递。 基于这个需求,趁着有空,花了半天的时间写了一个简单Cihook类来实现解决这个问题。, (*1)
如果你的CI框架是使用composer来安装的,使用这种方式来安装这个钩子类将会极为方便。 1.在项目根目录下的composer.json文件中增加如下依赖;, (*2)
"require": {
"junec/cihook": "dev-master"
}
2.执行composer update即可完成安装, (*3)
1.在application/config/config.php中找到如下开关:, (*4)
// CI钩子开关配置,启用 $config['enable_hooks'] = TRUE;
2.找到application/config/hook.php,如果没有则可手动创建 3.注册你的钩子, (*5)
<?php
defined('BASEPATH') OR exit('No direct script access allowed');
$hook['pre_system'] = function()
{
// 方式一,直接在此注册你的钩子
\Junec\Cihook\Hook::add('pay', 'before');
\Junec\Cihook\Hook::add('pay', 'after');
};
4.在application目录下创建文件夹plugin,再创建文件application/plugin/Pay/Pay.php, (*6)
<?php
class Pay {
public function before()
{
echo '我要开始支付啦<br>';
}
public function after($order_id)
{
echo '将此订单信息通过短息发给用户';
}
}
5.埋下钩子, (*7)
<?php
defined('BASEPATH') OR exit('No direct script access allowed');
class Pay extends CI_Controller {
// 订单支付
public function submit($order_id)
{
// 调用钩子
\Junec\Cihook\Hook::listen('Pay', 'before');
// 支付
$bool = $this->order_model->pay($order_id);
if ($bool) {
// 调用钩子
\Junec\Cihook\Hook::listen('pay', 'after', $order_id);
}
}
}
输入结果:, (*8)
我要开始支付啦 将此订单信息通过短息发给用户, (*9)