This article describes the usage of CodeIgniter hook with examples. Share it with everyone for your reference, the details are as follows:
There are 7 elliptical boxes in the CodeIgniter execution flow chart, which means that 7 hooks are buried during the execution process. So let’s first take a look at what is a hook?
Two paragraphs of text found online:
The complete implementation of hooks should be called event-driven. Event-driven is divided into two stages. The first stage is to register events. The purpose is to give a name to "events" that may occur in the future. The simple implementation method is to use the singleton mode to generate a persistent object or register a global variable. Then insert the event name, as well as the class and method corresponding to the event into the global variable. That is to mount a hook.
The second stage is to trigger the event, which is essentially to query the event global variable for the name of the event to be triggered, then find the registered class and method, instantiate and run. In this way, you can get rid of the traditional rules that programs must be in order, and further achieve the purpose of decoupling.
Hook functions can intercept and process messages from other applications. Whenever a specific message is sent, the hook program first captures the message before reaching the destination window, that is, the hook function first obtains control. At this time, the hook function can process (change) the message, continue to deliver the message without processing it, or force the message delivery to end.
You can see:
1. The hook function is preset and triggered under specific conditions.
2. After the hook function takes over the program, it can affect the direction of the program.
CI default hook
There are 7 hooks set in CI, and the hooks are relatively independent from each other. The first three hooks are set before instantiation, which means that the get_instance instance cannot be used, and global is required to use the instantiated class. The function manual of the 7 hooks is relatively clear. The cached output can be rewritten, the output can be processed, etc.
How to trigger CI hook?
CI has set a hook switch in the configuration file. To use the hook, you must first turn on the switch, and then configure the hook array in config/hook.php, such as setting the post_controller_constructor hook:
$hook['post_controller_constructor'] = array( 'class' => 'Hook', 'function' => 'post_controller_constructor', 'filename' => 'Hook.php', 'filepath' => 'hooks', 'params' => array('beer', 'wine', 'snacks') );
When the controller is instantiated, it will be triggered to execute the post_controller_constructor method in Hook.php in the hooks directory before calling the action. We can do some processing in this method.
Hook application
So far I have not realized the wonderfulness of CI hooks. There are some programs on the Internet that use CI hooks to implement permission control, that is, permission judgment is done in post_controller_constructor, because this hook is like a constructor. In the constructor It is indeed feasible to determine whether the method to be executed next has permission. But this function can also be implemented in MY_Controller, and it will even be better. Because the CI hook is global, the hook will be started whether in the foreground or the background. Although this hook program can make judgments, the judgment here is not necessarily the best. As mentioned earlier, the public controllers of different modules in MY_Controller are separated, and the front and backend inherit different controllers. If I only need to control the permissions of the backend, I can do it directly in the public controller of the backend, without affecting the frontend, only for the frontend. Control the necessary parts.
Here is a non-CI example, the thinking is the same. There are many partners in the user login registration function of cooperation channels. Different partners need to register the same basic information, but each partner may have some special fields or different verification methods.
Many times when we encounter problems, we can put them into perspective in our daily lives. Taking the registration processing logic as an example, you can see that one of the processes remains unchanged. Accept parameters->Process before registration information->Registration->Process after registration information. What has changed? Each step may change, but the process does not. Therefore, you can set up hooks for before, after, processing and other related places, and distribute the processing logic to specific situations. There is a reference diagram below. The specific method of setting hooks depends on the project:
Facts have also proved that this method is feasible. Although there are many partners, they can also be grouped. Hundreds of registration pages can be easily implemented. Therefore, it is very convenient to use hooks to handle the changing needs of this process while a certain step in the middle is changing.
To put it simply, a hook is to execute a program under specific conditions; to put it simply, a hook is a way to relieve the if judgment.
Excessive if judgments will make the program difficult to read and maintain, but hook processing can make the program more flexible. Hooks have certain triggering conditions. The conditions can be configured, read from the database, or implemented through some technologies, such as reflection. Using hooks can achieve the purpose of decoupling.
Readers who are interested in more CodeIgniter related content can check out the special topics on this site: "codeigniter introductory tutorial" and "CI (CodeIgniter) framework advanced tutorial"
I hope this article will be helpful to everyone’s PHP program design based on the CodeIgniter framework.