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..
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..
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..
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:
Hay tres ganchos que entran en esta categoría, así que repasemos cada uno de ellos.
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.
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.
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..
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..
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..
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.
clase
La clave contiene el nombre de una clase que contiene el código que debe ejecutarse..función
La tecla contiene el nombre del método que se invocará en la ejecución del enlace.nombre del archivo
Puntos clave para el archivo que define el código de enlace completo.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..
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..