Glosario de términos

AJAX

Asynchronous JavaScript and XML – tecnología de intercambio de información entre el cliente y el servidor a través del protocolo HTTP sin necesidad de recargar toda la página con cada solicitud. Aunque el nombre pueda sugerir que solo envía datos en formato XML, también se utiliza comúnmente el formato JSON.

Acción del presentador

Parte lógica del presenter que realiza una acción. Por ejemplo, muestra la página de un producto, cierra la sesión del usuario, etc. Un presenter puede tener múltiples acciones.

BOM

El llamado byte order mark es un carácter especial al principio de un archivo que se utiliza como indicador del orden de los bytes en la codificación. Algunos editores lo insertan en los archivos. Es prácticamente invisible, pero causa problemas con el envío de la salida y las cabeceras desde PHP. Para eliminarlo masivamente, puede usar Code Checker.

Controlador

Controlador que procesa las solicitudes del usuario y, en base a ellas, llama a la lógica de aplicación apropiada (es decir, el model) y luego solicita a la view que renderice los datos. El equivalente a los controladores en Nette Framework son los presenters.

Cross-Site Scripting (XSS)

Cross-Site Scripting es un método de vulneración de sitios web que abusa de salidas no tratadas. El atacante puede entonces inyectar su propio código en la página y así modificarla o incluso obtener datos sensibles sobre los visitantes. La única forma de defenderse contra XSS es tratando de manera consistente y correcta todas las cadenas.

Nette Framework introduce una tecnología revolucionaria Context-Aware Escaping, que le librará para siempre del riesgo de Cross-Site Scripting. Trata automáticamente todas las salidas, por lo que no puede ocurrir que el codificador olvide algo.

Cross-Site Request Forgery (CSRF)

El ataque Cross-Site Request Forgery consiste en que el atacante atrae a la víctima a una página que, discretamente en el navegador de la víctima, realiza una solicitud al servidor en el que la víctima ha iniciado sesión, y el servidor cree que la solicitud fue realizada voluntariamente por la víctima. Así, bajo la identidad de la víctima, realiza una determinada acción sin que ésta lo sepa. Puede tratarse de un cambio o eliminación de datos, envío de un mensaje, etc.

Nette Framework protege automáticamente los formularios y señales en los presenters contra este tipo de ataque. Lo hace impidiendo que se envíen o se invoquen desde otro dominio.

Inyección de Dependencia

La Inyección de Dependencia (DI) es un patrón de diseño que indica cómo separar la creación de objetos de sus dependencias. Es decir, que la clase no es responsable de crear o inicializar sus dependencias, sino que estas dependencias le son proporcionadas por código externo (que también puede ser un Contenedor DI). La ventaja es que permite una mayor flexibilidad del código, una mejor comprensión y pruebas más fáciles de la aplicación, ya que las dependencias son fácilmente reemplazables y están aisladas de otras partes del código. Más en el capítulo ¿Qué es la Inyección de Dependencia?

Contenedor de Inyección de Dependencia

Un Contenedor de Inyección de Dependencia (también Contenedor DI o Contenedor IoC) es una herramienta que se encarga de crear y gestionar las dependencias en una aplicación (o servicios). El contenedor suele tener una configuración que define qué clases dependen de otras clases, qué implementaciones concretas de dependencias se deben usar y cómo se deben crear estas dependencias. Luego, el contenedor crea estos objetos y los proporciona a las clases que los necesitan. Más en el capítulo ¿Qué es un Contenedor DI?

Escape / Escapado

El escapado es la conversión de caracteres que tienen un significado especial en un contexto dado a otras secuencias correspondientes. Ejemplo: queremos escribir comillas en una cadena delimitada por comillas. Dado que las comillas tienen un significado especial en el contexto de la cadena y su simple escritura se entendería como el final de la cadena, es necesario escribirlas con otra secuencia correspondiente. Cuál exactamente lo determinan las reglas del contexto.

Filtro (antes helper)

En las plantillas, el término filtro generalmente se refiere a una función que ayuda a modificar o reformatear los datos a su forma final. Las plantillas disponen de varios filtros estándar.

Invalidación

Notificación a un snippet para que se vuelva a dibujar. En otro sentido, también la eliminación del contenido de la caché.

JSON

Formato para el intercambio de datos basado en la sintaxis de JavaScript (es un subconjunto de ella). La especificación exacta se puede encontrar en la página www.json.org.

Componente

Parte reutilizable de una aplicación. Puede ser una parte visual de la página, como describe el capítulo Escribiendo componentes, o el término componente también se refiere a la clase Component (tal componente no tiene por qué ser visual).

Caracteres de control

Los caracteres de control son caracteres invisibles que pueden aparecer en el texto y, eventualmente, causar problemas. Para eliminarlos masivamente de los archivos, puede usar Code Checker y para eliminarlos de una variable, la función Strings::normalize().

Eventos

Un evento es una situación esperada en un objeto, que cuando ocurre, se llaman los llamados handlers, es decir, callbacks que reaccionan al evento (ejemplo). Un evento puede ser, por ejemplo, el envío de un formulario, el inicio de sesión de un usuario, etc. Los eventos son, por tanto, una forma de Inversion of Control.

Por ejemplo, el inicio de sesión de un usuario ocurre en el método Nette\Security\User::login(). El objeto User tiene una variable pública $onLoggedIn, que es un array al que cualquiera puede añadir un callback. En el momento en que el usuario inicia sesión, el método login() llama a todos los callbacks del array. El nombre de la variable en la forma onXyz es una convención utilizada en todo Nette.

Latte

Uno de los sistemas de plantillas más avanzados.

Modelo

El modelo es la base de datos y, especialmente, funcional de toda la aplicación. Contiene toda la lógica de la aplicación (también se utiliza el término lógica de negocio). Es la M de MVC o MVP. Cualquier acción del usuario (inicio de sesión, añadir un producto al carrito, cambiar un valor en la base de datos) representa una acción del modelo.

El modelo gestiona su estado interno y ofrece una interfaz fija al exterior. Llamando a las funciones de esta interfaz podemos consultar o cambiar su estado. El modelo no sabe de la existencia de la view o del controller.

Modelo-Vista-Controlador

Arquitectura de software que surgió de la necesidad de separar en las aplicaciones con interfaz gráfica el código de manejo (controller) del código de la lógica de la aplicación (model) y del código que muestra los datos (view). Esto hace que la aplicación sea más clara, facilita el desarrollo futuro y permite probar las partes individuales por separado.

Modelo-Vista-Presentador

Arquitectura basada en Model-View-Controller.

Módulo

Un módulo representa una parte lógica de la aplicación. En una disposición típica, es un grupo de presenters y plantillas que abordan un área específica de funcionalidad. Los módulos se colocan en directorios separados, como Front/, Admin/ o Shop/.

Por ejemplo, una tienda online se divide en:

  • Frontend (Shop/) para ver productos y comprar
  • Sección de clientes (Customer/) para gestionar pedidos
  • Administración (Admin/) para el operador

Técnicamente, son directorios normales, pero gracias a una división clara ayudan a escalar la aplicación. El presenter Admin:Product:List estará físicamente ubicado, por ejemplo, en el directorio app/Presentation/Admin/Product/List/ (ver mapeo de presenters).

Namespace / Espacio de nombres

Espacio de nombres, parte del lenguaje PHP desde la versión 5.3 y algunos otros lenguajes de programación, que permite usar clases que tienen el mismo nombre en diferentes librerías sin que se produzca una colisión de nombres. Ver la documentación de PHP.

Presenter

Un presenter es un objeto que toma una petición traducida por el router a partir de una petición HTTP y genera una respuesta. La respuesta puede ser una página HTML, una imagen, un documento XML, un archivo en disco, JSON, una redirección o cualquier cosa que se le ocurra.

Normalmente, el término presenter se refiere a un descendiente de la clase Nette\Application\UI\Presenter. Según las peticiones entrantes, ejecuta las acciones correspondientes y renderiza las plantillas.

Router / Enrutador

Traductor bidireccional entre una petición HTTP / URL y una acción del presenter. Bidireccional significa que a partir de una petición HTTP se puede derivar la acción del presenter, pero también a la inversa, generar la URL correspondiente para una acción. Más en el capítulo sobre enrutamiento de URL.

Las cookies SameSite proporcionan un mecanismo para reconocer qué llevó a la carga de la página. Puede tener tres valores: Lax, Strict y None (este último requiere HTTPS). Si la solicitud de la página proviene directamente del sitio web o el usuario abre la página introduciéndola directamente en la barra de direcciones o haciendo clic en un marcador, el navegador enviará todas las cookies al servidor (es decir, con los indicadores Lax, Strict y None). Si el usuario llega al sitio web haciendo clic en un enlace desde otro sitio web, se pasarán al servidor las cookies con los indicadores Lax y None. Si la solicitud se origina de otra manera, como el envío de un formulario POST desde otro sitio web, la carga dentro de un iframe, mediante JavaScript, etc., solo se enviarán las cookies con el indicador None.

Servicio

En el contexto de la Inyección de Dependencia, un servicio se refiere a un objeto que es creado y gestionado por el contenedor DI. Un servicio puede ser fácilmente reemplazado por otra implementación, por ejemplo, con fines de prueba o para cambiar el comportamiento de la aplicación, sin necesidad de modificar el código que utiliza el servicio.

Snippet

Fragmento, parte de una página que se puede volver a dibujar de forma independiente durante una solicitud AJAX.

Vista

La vista es la capa de la aplicación que se encarga de mostrar el resultado de la solicitud. Normalmente utiliza un sistema de plantillas y sabe cómo mostrar cada componente o el resultado obtenido del modelo.

versión: 4.0