CodeIgniter钩子使用示例的详细说明
本文说明了CodeIgniter钩子的用法。分享给大家参考,如下:
CodeIgniter执行流程图中有7个椭圆框,意味着执行过程中埋了7个钩子。让我们来看看什么是钩子。
互联网上有两段文字:
钩子的完整实现应该称为事件驱动。事件驱动程序分为两个阶段。第一个阶段是注册事件,目的是为未来可能发生的“事件”命名。简单的实现方法是使用singleton模式生成一个持久对象或注册一个全局变量,然后将事件名称和对应的类和方法插入到全局变量中。就是装个钩子。
第二阶段是触发事件,本质上是在事件的全局变量中查询要触发的事件的名称,然后找到注册的类和方法,实例化并运行。这样就可以摆脱传统方式中程序必须有序的规则,进一步实现解耦的目的。
钩子函数可以拦截和处理来自其他应用程序的消息。每当发送特定消息时,钩子子程在到达目的窗口之前捕获该消息,也就是说,钩子函数首先获得控制权。此时,钩子函数可以处理(改变)消息,继续传输消息而不进行处理,或者强制结束消息传输。
你可以看到:
1.挂钩功能是在特定条件下预设和触发的。
2.钩子函数接管程序后,会影响程序的方向。
CI预设挂钩。
CI中有7个钩子,彼此相对独立。前三个钩子是在实例化之前设置的,这意味着get_instance实例不能使用,使用实例化的类需要global。七个钩子的功能手册相当清晰,可以重写缓存的输出,处理输出等。
如何触发CI钩子?
配置项已在配置文件中设置了挂钩开关。要使用钩子,必须首先打开开关,然后在config/hook.php中配置钩子数组,例如设置post_controller_constructor钩子:
$ Hook[' post _ controller _ constructor ']=array(' class '=' Hook ',' function '=' post _ controller _ constructor ',' filename'='Hook.php ',' filepath'='hooks ',' params'=array('beer ',' wine ','小吃');控制器实例化后,它将在调用操作之前触发在hooks目录下的hooks中执行post_controller_constructor方法。我们可以用这种方法做一些处理。
钩子的应用。
到现在还没有体会到CI勾的美。看看网上一些用CI钩子实现权限控制的程序,就是在post_controller_constructor中进行权限判断。因为这个钩子就像一个构造函数,判断接下来要执行的方法在构造函数中是否有权限是可行的。但是这个功能也可以在MY_Controller中实现,甚至更好。因为CI的钩子是全局的,所以前台和后台都会开始钩子。虽然钩子程序可以做出判断,但这里的判断不一定是最好的。如前所述,MY_Controller中不同模块的公共控制器是分开的,前台和后台继承不同的控制器。如果只需要控制后台的权限,可以直接在后台普通控制器中实现,不影响前台,只控制需要的部分。
这里举一个非CI的例子,思路是一样的。合作渠道的用户登录注册功能有很多合作伙伴。不同的合作伙伴需要注册相同的基本信息,但每个合作伙伴可能有一些特殊的字段或不同的验证方法。
很多时候,当我们遇到问题时,我们可以把它们融入到日常生活中。以注册处理逻辑为例,可以看到其中一个流程是不变的。接受参数-注册数据的预处理-注册-注册数据的后处理。变化是什么?每一步都可能改变,但过程不会改变。所以可以在前面、后面、加工等相关地方设置钩子,将加工逻辑分配到具体情况。这里有一个参考图。如何设置挂钩取决于项目:
事实证明,这种方法是可行的。虽然合作伙伴很多,但也可以分组,几百个注册页面也很容易实现。所以用钩子来处理工艺不变,中间步骤变化的需求是非常方便的。
简单来说,钩子就是在特定条件下执行的程序;简单来说,钩子是一种去除if判断的方法。
过多的if判断会使程序难以阅读和维护,钩子处理可以使程序更加灵活。钩子有一定的触发条件,可以配置,可以从数据库读取,也可以通过反射等技术实现。钩子可以用来实现解耦。
更多对CodeIgniter感兴趣的读者,请查看本网站主题:《codeigniter入门教程》和《CI(CodeIgniter)框架进阶教程》。
希望本文对基于CodeIgniter框架的PHP编程有所帮助。
版权声明:CodeIgniter钩子使用示例的详细说明是由宝哥软件园云端程序自动收集整理而来。如果本文侵犯了你的权益,请联系本站底部QQ或者邮箱删除。