In this paper, the implementation of Thinkphp's behavior extension behavior is introduced in detail in the form of examples, which will help readers to master the development of thinkphp in a more flexible way, and the following steps are as follows:
thinkphp behavior Extension (Behavior) process:
The first is to read the configuration file information:
$mode = include is_file (conf_path. ' core.php ')? Conf_path. ' core.php ': Mode_path. App_mode. '. PHP ';
Read configuration file Information thinkphp\mode\common.php
Behavioral extensions define
' tags ' => array (
' app_init ' => Array (
),
' App_begin ' => Array (
' Behavior\readhtmlcache ',//read static cache
),
' app_end ' => Array (
' behavior\showpagetrace ',// Page trace display
),
' path_info ' => Array (),
' Action_begin ' => Array (),
' Action_end ' => Array (),
' View_begin ' => Array (),
' view_parse ' => Array (
' behavior\ Parsetemplate ',//template parsing supports PHP, built-in template engine and third party template engine
,
' template_filter ' => array (
' behavior\ Contentreplace ',//template output replacement
),
' View_filter ' => Array (
' behavior\writehtmlcache ',//write static cache
),
' view_end ' => Array (),
System behavior extensions are invoked by default: static cache reads, page trace display output, template resolution, template content output substitution, static cache write
Load mode behavior Definition
if (isset ($mode [' tags '])) {
hook::import ($mode [' tags '])? $mode [' Tags ']:include $mode [' tags ']);
}
Load application Behavior Definition
if (is_file (conf_path. ' tags.php '))
//Allow application to add Development mode configuration definition
hook::import (include Conf_ PATH. ' tags.php ');
Use hook to load system behavior and custom behavior, and save configuration information to hook private attribute $tags
App::run () is invoked when the thinkphp\library\think\think.class.php initialization is complete;
thinkphp\library\think\app.class.php files are as follows:
/**
* Shortcut method for running application instance Portal file
* @access public
* @return void/
static public
function run () {
//application First Start label
hook::listen (' App_init ');
App::init ();
Application Start label
hook::listen (' App_begin ');
Session Initialization
if (!IS_CLI) {session
(' Session_options ');
}
Record application initialization time
G (' inittime ');
App::exec ();
Apply end tag
hook::listen (' app_end ');
return;
}
You can see whether the program needs to be handled when it listens (to see) the action by hook before app Init. Loop $tags[' App_init '] gets the class name and executes the behavior extension class Run method automatically through the class name
All hooks are as follows:
' Url_dispatch ' //url dispatch end tag '
app_init '/ Apply initialize tag
' app_begin '// Apply start tag
' app_end '/ / Apply the end tag ' action_begin '///action before operation ' action_end '//action performed
' Ajax_return '// Used to extend other return format data
' Path_info ' //Detect routing rules if not, the URL
' template_filter ' /template compiled filter label ' is scheduled by default rule
View_ Begin '//view start label '
view_end '/ View end tag
' view_parse '/ View parse label
' view_filter ' // Content Filter Label
Disadvantages are as follows:
1. Order is not controllable (configuration file does not have special parameters to control the order) such as App_init at the same time there are 2 monitoring the first call to which method.
2. Monitoring is not a global monitor it's too dead. There are only a few well-defined hooks that cannot be automatically controlled by the configuration file. The hook for each operation (may be due to performance not added)
The advantages are as follows:
1. Can achieve a lot of behavioral expansion
2. Can agent detection, browser anti-refresh detection, operation routing detection, etc.
Summarize:
Behavioral extensions are the extra way to perform a particular function when a program is in operation. If the program in the operation of the database read through the Explian to obtain performance information and monitoring performance bottlenecks, such as the occurrence of the acquisition of data more than a specific number of seconds to email the relevant information to the project manager.