Cómo funciona el sistema de gancho de CodeIgniter

Como desarrollador de CodeIgniter, a veces terminas en una situación que requiere que alteres el núcleo del marco o el flujo de ejecución para cumplir tus requisitos personalizados. Por supuesto, nunca se recomienda modificar los archivos principales, ya que hace que el proceso de actualización sea engorroso. Afortunadamente, el marco CodeIgniter viene con el sistema de ganchos, que le permite lidiar con este escenario.

En este artículo, comenzaremos con una introducción al sistema de ganchos en el marco de CodeIgniter. Luego, discutiremos los diferentes tipos de ganchos disponibles. Y, por último, aprovecharemos esta oportunidad para explorar la creación de ganchos personalizados..

Enganches: un sistema para anular el Core Framework

Echemos un vistazo rápido a lo que dice la documentación oficial de CodeIgniter sobre el sistema de ganchos:

La función Hooks de CodeIgniter proporciona un medio para aprovechar y modificar el funcionamiento interno del marco sin hackear los archivos principales.

Suena bastante autoexplicativo, ¿no es así? En su desarrollo diario de aplicaciones, si alguna vez se siente tentado a modificar los archivos principales de CodeIgniter, primero debe considerar el sistema de ganchos para ver si cumple con sus requisitos..

Supongamos que desea crear un sistema de referencia de rendimiento personalizado para supervisar la ejecución de la aplicación. Se da cuenta de que los archivos principales deben modificarse para lograr el resultado deseado. En ese caso, podrías usar el pre_sistema y el post_sistema ganchos para entrar en el flujo de ejecución y recopilar las estadísticas según sea necesario.

Si conoce el patrón de observador de eventos, el concepto es similar en cuanto a que escucha los eventos generados por el sistema, y ​​el código del observador correspondiente se ejecuta cuando se activa el evento observado.

Así que esa fue una introducción básica al sistema de ganchos en CodeIgniter. En la siguiente sección, veremos de cerca los diferentes ganchos disponibles para que usted pueda conectarse al sistema..

Ir a través de los diferentes ganchos

El sistema de enganche CodeIgniter proporciona diferentes puntos de enganche que puede usar mientras implementa sus enganches personalizados. El punto de enlace es básicamente un cierto estado en el flujo de trabajo de ejecución de solicitudes en un momento dado.

Por ejemplo, cuando implementas el pre_sistema Hook, sabes que estás al comienzo de la fase de arranque. Por otro lado, si has elegido el post_sistema Enganche, puede estar seguro de que la ejecución se ha completado y la respuesta ya se ha enviado al cliente..

En esta sección, analizaremos los diferentes puntos de enlace que proporciona el sistema de enlace CodeIgniter..

Ganchos del sistema

los pre_sistema y el post_sistema los ganchos se incluyen en esta categoría ya que el primero se llama muy temprano durante la fase de arranque, mientras que el segundo se llama después de que se completa la ejecución de la página.

Puedo pensar en algunos casos de uso que podrían lograrse con los ganchos del sistema:

  • Punto de referencia
  • Explotación florestal
  • Redirección basada en reglas
  • Y más

Ganchos del controlador

Hay tres ganchos que entran en esta categoría, así que repasemos cada uno de ellos.

Gancho Pre Controlador

los precontrolador el gancho se llama justo antes de que la clase del controlador sea instanciada. Por lo tanto, si desea realizar más comprobaciones antes de que se llame al controlador, este es el gancho que está buscando.

Post Controller Constructor Hook

Como su nombre lo indica, el post_controller_constructor el gancho se llama inmediatamente después de que se crea una instancia del objeto del controlador y antes de la llamada del método real.

En este punto, está seguro de que el controlador se creará una instancia y el método se llamará pronto, por lo que podría cargar bibliotecas específicas del controlador aquí, o podría implementar la validación personalizada específica del controlador.

Post controlador de gancho

los post_controller El gancho se llama después de la ejecución del método del controlador. Así que las cosas que desea ejecutar después de la ejecución del controlador deben implementarse con este gancho.

Así que esa fue la historia de los ganchos específicos del controlador..

Anula ganchos

Mostrar anular gancho

De acuerdo con la documentación de CodeIgniter, el display_override gancho anula el núcleo _monitor método. El núcleo _monitor Este método se utiliza para enviar la salida al cliente y, por lo tanto, utilizando el display_override Enganche usted podría alterar la forma en que se envía la salida al usuario..

De hecho, exploraremos este gancho en detalle a medida que pasemos a la siguiente sección, en la que analizaremos cómo crear un gancho personalizado..

Anzuelo de anulación de caché

los cache_override gancho anula el núcleo _display_cache método de la Salida clase. los _display_cache El método es responsable de servir la salida en caché, por lo que podría usar este gancho si desea servir la salida de página desde la ubicación en caché diferente en caso de que haya implementado un mecanismo de caché diferente..

Eso termina la historia de diferentes puntos de gancho en el sistema de gancho CodeIgniter. En la siguiente sección, veremos cómo exactamente podría aprovechar el sistema de gancho al implementar un ejemplo del mundo real..

Cómo crear un gancho personalizado

Estoy seguro de que has tenido suficiente teoría hasta ahora, ¡así que volvamos a un desarrollo práctico! En esta sección, crearemos un enlace personalizado para demostrar los conceptos analizados hasta ahora en este artículo..

En nuestro caso, utilizaremos el display_override gancho que será responsable de la sustitución del token. Para ser más precisos, reemplazaremos todas las apariciones de [FECHA Y HORA] con la fecha actual. Por supuesto, eso suena como un caso de uso bastante simple, pero podría extenderlo fácilmente para que sea más específico según sus requisitos.

De forma predeterminada, el sistema de enlace está deshabilitado en el marco central, por lo que lo primero que debe hacer es habilitar el sistema de enlace..

Sigue adelante y abre el archivo de configuración. aplicación / config / config.php.

Busque el siguiente fragmento de código y enciéndalo cambiando FALSO a CIERTO.

Ahora, estamos listos para definir nuestros ganchos. De hecho, CodeIgniter ya viene con el archivo aplicación / config / hooks.php que podría utilizar si desea definir ganchos.

Por defecto, el hooks.php el archivo está vacío, así que vamos a agregar nuestro código de enlace personalizado para hacerlo más significativo.

 'ReplaceToken', 'function' => 'replacePlaceholderCode', 'filename' => 'ReplaceToken.php', 'filepath' => 'hooks');

La sintaxis de definir un gancho personalizado es bastante simple. Es el $ gancho Array que contiene todos los ganchos que necesitan ser ejecutados..

La clave de cada entrada de la matriz es el nombre del gancho que está definiendo. Cuando está definiendo un gancho, le está diciendo al sistema que ejecute una determinada pieza de código cuando algo sucede. Eso es exactamente lo que se debe proporcionar como valor de cualquier gancho. Vamos a revisar cada tecla rápidamente.

  • los clase La clave contiene el nombre de una clase que contiene el código que debe ejecutarse..
  • los función La tecla contiene el nombre del método que se invocará en la ejecución del enlace.
  • los nombre del archivo Puntos clave para el archivo que define el código de enlace completo.
  • los ruta de archivo define la ruta del directorio del archivo declarado bajo la nombre del archivo clave, y es relativa a la solicitud directorio. En general, se establece en manos, resultando así en una aplicación / ganchos estructura. Por supuesto, no hay nada que le impida definir un camino completamente diferente si desea hacerlo..

Como nota al margen, si no desea crear un archivo de clase, también podría proporcionar una función de cierre que se ejecutará cuando se active el gancho.

En nuestro caso, crearemos un archivo. ReplaceToken.php y de acuerdo con la definición de gancho debe colocarse bajo la aplicación / ganchos directorio.

Sigue adelante y crea un archivo. aplicación / ganchos / ReplaceToken.php con los siguientes contenidos.

CI = & get_instance (); // obtener la salida real $ contents = $ this-> CI-> output-> get_output (); // reemplazar los tokens $ this-> CI-> load-> helper ('fecha'); $ contents = str_replace ("[DATETIME]", standard_date (), $ contents); // establecer la salida echo $ contents; regreso;  

El objeto de nuestro gancho es reemplazar el [FECHA Y HORA] marcador de posición con la fecha real antes de que se envíe al cliente el resultado de cualquier página de nuestra aplicación.

Como hemos comentado anteriormente, el resultado de la página ya está construido para cuando display_override se llama gancho. Así que lo primero que nos gustaría hacer es buscar la salida que está lista para ser enviada al usuario.

// carga la instancia $ this-> CI = & get_instance (); // obtener la salida real $ contents = $ this-> CI-> output-> get_output ();

los obtener Instancia Este método se utiliza para instanciar la instancia de la aplicación y se asigna a $ esto-> CI. A continuación, utilizamos el get_output método de la Salida clase para obtener los contenidos de respuesta.

El resto es bastante simple. los [FECHA Y HORA] el marcador de posición debe reemplazarse con la fecha real. Para facilitar las cosas, el fecha el ayudante se utiliza para llevar a cabo la operación deseada, y casi hemos terminado en lo que respecta a nuestra lógica de enganche.

// reemplazar los tokens $ this-> CI-> load-> helper ('fecha'); $ contents = str_replace ("[DATETIME]", standard_date (), $ contents);

Por último, debe hacer eco de la salida como el display_override anula el _monitor Método que se utiliza para enviar la salida al cliente. Así que tenemos que hacerlo nosotros mismos en este caso; de lo contrario, habría sido manejado por el núcleo _monitor método.

// establecer la salida echo $ contents; regreso;

De hecho, eso termina la historia de nuestro gancho personalizado.!

Ahora, sigamos adelante y hagamos una nueva página CodeIgniter para que podamos probar nuestro gancho personalizado. Crear un archivo de controlador aplicación / controllers / TokenExample.php con los siguientes contenidos.

load-> view ('token_content'); 

Y aquí está cómo el archivo de vista asociado aplicación / views / token_content.php Debería mirar.

Fecha de hoy: [DATETIME]

Y eso es todo. Dirija su navegador a http: // your-code-igniter-site-url / TokenExample / index y debería ver el resultado esperado!

Así que ese es el sistema de gancho a su disposición si desea ingresar al flujo de trabajo típico de la aplicación CodeIgniter. Espero que hayas disfrutado el artículo y que te ayude en el desarrollo diario de la aplicación CodeIgniter..

Conclusión

Hoy, pasamos por uno de los ganchos de función CodeIgniter incorporados. Los ganchos le permiten intervenir en el flujo de trabajo de ejecución de solicitudes típico de su aplicación CodeIgniter.

Al principio del artículo, discutimos el concepto básico de Hooks en CodeIgniter, y luego discutimos los diferentes ganchos disponibles en el sistema. Finalmente, en la última sección exploramos cómo crear un gancho personalizado y su funcionamiento interno.

No dudes en expresar tus pensamientos utilizando el siguiente feed. Además, si desea que se me ocurra algún tema específico, por favor hágamelo saber..