¿Cómo se refleja la seguridad y escalabilidad de thinkphp?
Explicación detallada de los ejemplos de aplicación de comportamiento de extensión de comportamiento de ThinkPHP
ThinkPHP está en desarrollo, los pasos específicos son los siguientes:
Proceso de extensión de comportamiento de ThinkPHP (comportamiento):
El primero es leer la información del archivo de configuración:
$mode = include is_file(CONF_PATH.'core.php')?CONF_PATH.'core.php':MODE_PATH.APP_MODE. '.php'; p>
Leer el archivo de configuración ThinkPHP\Mode\common.php
// Definición de extensión de comportamiento
'tags' => array(
' app_init' ? => array(
),
'app_begin' ?=> array( 'Behavior\ReadHtmlCache', // Leer caché estático
) ,
'app_end' ? => array( 'Behavior\ShowPageTrace', // Visualización de seguimiento de página
),
'path_info' ?=> matriz (),
'action_begin' => matriz(),
'action_end' ? => matriz(),
'view_begin' ? => array (),
'view_parse' ?=> array( 'Behavior\ParseTemplate', // Análisis de plantillas Soporte para PHP, motores de plantillas integrados y plantillas de terceros motores
),
'template_filter' => array( 'Behavior\ ContentReplace', // Reemplazo de salida de plantilla
),
'view_filter' ?=> array( 'Behavior\WriteHtmlCache', // Escribir en caché estático
),
'view_end' ? >
),
Llamadas predeterminadas para extensiones de comportamiento del sistema: lectura de caché estática, salida de visualización de pageTrace, análisis de plantilla, reemplazo de salida de contenido de plantilla, escritura de caché estática
//Modo de carga definición de comportamiento
if(isset($mode['tags'])){
Hook::import(is_array($mode['tags'])?Utilice Hook::import( include CONF_PATH.'tags.php'); ?
Utilice Hook para cargar el comportamiento del sistema y el comportamiento personalizado respectivamente, y guarde la información de configuración en la propiedad privada $tags del Hook.
ThinkPHP\Library \Think\Think.class.php llamará a App::run() después de que se complete la inicialización;
ThinkPHP\Library\Think\App.class.php llamará a App ::run() después de que se complete la inicialización).
El archivo php es el siguiente:
/**
* Método de acceso directo para ejecutar el archivo de entrada de muestra de la aplicación
* @access public
* @return void
*/
p>función pública estática run() {
//Etiqueta de inicialización de la aplicación
Hook ::listen('app_init');
App::init();
// Etiqueta de inicio de la aplicación
Hook::listen( 'app_begin ');
// Inicialización de sesión
if(!IS_CLI){ session(C('SESSION_OPTIONS'));
}
// Registrar el tiempo de inicialización de la aplicación
G('initTime' );
App::exec();
// Marca de finalización de la aplicación p>
Hook::listen('app_end');
return
}
Puede ver si es necesario realizar una operación manejada, el programa escuchará (y verificará) la operación a través de ganchos antes de que se inicie la aplicación. Haga un bucle en $tags['app_init'] para obtener el nombre de la clase y ejecutar automáticamente el comportamiento según el nombre de la clase. Extienda el método de ejecución de la clase
Todos los enlaces son los siguientes:
'url_dispatch' // Etiqueta final de programación de URL
'app_init' // Etiqueta de inicialización de la aplicación
'app_begin' // Etiqueta de inicio de la aplicación
'app_end' / / Etiquetas de fin de aplicación
'action_begin' // Acción antes de la ejecución
'action_end' // ¿Acción después de la ejecución?
'ajax_return' // Se utiliza para ampliar otros datos de formato de devolución
'path_info' ?// Si la regla de enrutamiento no existe, la URL de envío predeterminada
'template_filter' // Etiqueta de filtro de compilación de plantilla
'view_begin' ?// Ver etiqueta de inicio
'view_end' ?// Ver etiqueta final
' view_parse ' ?//Ver etiqueta de análisis
'view_filter' ?//Etiqueta de filtrado de contenido
Las desventajas son las siguientes:
1. controlable (no en el archivo de configuración Parámetros especiales que controlan el orden), por ejemplo, si app_init tiene 2 monitores al mismo tiempo, qué método se llamará primero.
2. El monitoreo no es un monitoreo global. Está escrito internamente de manera demasiado rígida. Solo hay algunas cosas que no se pueden definir. Puede controlar automáticamente el enlace de cada operación a través del archivo de configuración. agregado debido a problemas de rendimiento)
Las ventajas son las siguientes:
1. Puede implementar muchas extensiones de comportamiento
2. detección, detección de enrutamiento de operaciones, etc.
Resumen:
La extensión de comportamiento se refiere a operaciones adicionales que realizan funciones específicas en un programa. Por ejemplo, cuando el programa se está ejecutando, explian lee la base de datos para obtener información de rendimiento y monitorea los cuellos de botella en el rendimiento, como enviar información relevante al gerente del proyecto por correo electrónico cuando la adquisición de datos excede un número específico de segundos.