Glosario de términos

AJAX

Asynchronous JavaScript and XML: una tecnología para intercambiar información entre el cliente y el servidor mediante el protocolo HTTP sin necesidad de recargar toda la página en cada petición. Aunque el nombre pueda sugerir que los datos se envían solo en formato XML, también se usa habitualmente el formato JSON.

Acción del presenter

Una parte lógica del presenter que realiza una única acción. Por ejemplo, mostrar la página de un producto, cerrar la sesión de un usuario, etc. Un mismo presenter puede tener varias acciones.

BOM

La byte order mark es un primer carácter especial en un archivo que sirve de indicador del orden de bytes en la codificación. Algunos editores lo insertan en los archivos. Es prácticamente invisible, pero causa problemas al enviar la salida y las cabeceras desde PHP. Para eliminarlo en masa puede usar Code Checker.

Controller

Un controlador que procesa las peticiones del usuario y, a partir de ellas, llama a la lógica de aplicación correspondiente (es decir, al model) y luego pide a la view que renderice los datos. El equivalente de los controllers en Nette Framework son los presenters.

Cross-Site Scripting (XSS)

Cross-Site Scripting es un método para atacar sitios web aprovechando salidas sin escapar. Un atacante puede así inyectar su propio código en la página, y con ello modificarla o incluso obtener datos sensibles de los visitantes. La protección contra XSS consiste en escapar de forma consistente y correcta todas las cadenas de salida.

Nette Framework trae la revolucionaria tecnología Context-Aware Escaping, que elimina definitivamente el riesgo de Cross-Site Scripting. Escapa automáticamente todas las salidas, así que el desarrollador no puede olvidarse de nada.

Cross-Site Request Forgery (CSRF)

En un ataque de Cross-Site Request Forgery, el atacante atrae a la víctima a una página que, de forma discreta, ejecuta en el navegador de la víctima una petición a un servidor donde esta tiene la sesión iniciada. El servidor cree que la petición la hizo la víctima por voluntad propia. Así, bajo la identidad de la víctima, realiza una acción sin que ella lo sepa. Puede tratarse de modificar o borrar datos, enviar un mensaje, etc.

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

Cross-Origin Resource Sharing (CORS)

CORS es un mecanismo de seguridad que permite a una página web hacer peticiones de JavaScript a un dominio distinto de aquel del que se cargó la página. Sin CORS, los navegadores bloquean esas peticiones por motivos de seguridad.

Por ejemplo, si su web funciona en https://myapp.com e intenta obtener datos de https://api.example.com mediante JavaScript (AJAX, Fetch API), el navegador comprobará si el servidor de la API permite esa petición entre orígenes. El servidor de la API debe responder con cabeceras HTTP especiales, como Access-Control-Allow-Origin: https://myapp.com, para dar permiso.

Dependency Injection

Dependency Injection (DI) es un patrón de diseño que dice cómo separar la creación de los objetos de sus dependencias. Es decir, una clase no es responsable de crear ni de inicializar sus dependencias; en su lugar, esas dependencias las proporciona un código externo (que puede ser un contenedor DI). La ventaja está en una mayor flexibilidad del código, mejor comprensibilidad 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 Dependency Injection?

Dependency Injection Container

Un contenedor de Dependency Injection (también contenedor DI o contenedor IoC) es una herramienta que se encarga de crear y administrar las dependencias (o servicios) dentro de una aplicación. El contenedor suele tener una configuración que define qué clases dependen de otras, qué implementaciones concretas de las dependencias hay que usar y cómo hay que crear esas dependencias. Después, el contenedor crea esos objetos y se los proporciona a las clases que los necesitan. Más en el capítulo ¿Qué es un contenedor DI?

Escapado

El escapado es la conversión de los caracteres que tienen un significado especial en un contexto dado en otras secuencias equivalentes. Un ejemplo: queremos escribir comillas dentro de una cadena delimitada por comillas. Como las comillas tienen un significado especial en el contexto de la cadena, y escribirlas sin más se interpretaría como el final de la cadena, hay que escribirlas mediante otra secuencia equivalente. La secuencia exacta la determinan las reglas del contexto.

Filtro

En las plantillas, un filtro suele ser una función que ayuda a modificar o reformatear los datos hasta su forma final. Las plantillas ofrecen varios filtros estándar.

Invalidación

Avisar a un snippet de que se redibuje. En otro contexto también significa borrar el contenido de la caché.

JSON

Un formato de intercambio de datos basado en la sintaxis de JavaScript (es un subconjunto de ella). La especificación exacta se encuentra en www.json.org.

Componente

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

Caracteres de control

Los caracteres de control son caracteres invisibles que pueden aparecer en el texto y causar problemas. Para eliminarlos en masa 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 dentro de un objeto. Cuando ocurre, se llama a los llamados manejadores, 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 del 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. Cuando el usuario inicia sesión, el método login() llama a todos los callbacks del array. El formato del nombre de la variable onXyz es una convención que se usa en todo Nette.

Latte

Uno de los sistemas de plantillas más avanzados.

Model

El model son los datos y, sobre todo, el núcleo funcional de toda la aplicación. Contiene toda la lógica de la aplicación (también se usa el término lógica de negocio). Es la M de MVC o MVP. Cualquier acción del usuario (iniciar sesión, añadir mercancía al carrito, cambiar un valor en la base de datos) representa una acción del model.

El model gestiona su estado interno y ofrece hacia fuera una interfaz fija. Llamando a las funciones de esa interfaz podemos consultar o cambiar su estado. El model no sabe nada de la existencia de la view ni del controller.

Model-View-Controller

Una 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 aplicación (model) y del código que muestra los datos (view). Eso hace la aplicación más clara, facilita su desarrollo futuro y permite probar las distintas partes por separado.

Model-View-Presenter

Una 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 resuelven un área de funcionalidad concreta. Los módulos se colocan en directorios separados, como Front/, Admin/ o Shop/.

Por ejemplo, una tienda electrónica se puede dividir en:

  • Frontend (Shop/) para navegar por los productos y comprar
  • Sección de clientes (Customer/) para gestionar los pedidos
  • Administración (Admin/) para los operadores

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

Namespace

Un espacio de nombres, parte del lenguaje PHP desde la versión 5.3 y de algunos otros lenguajes de programación, permite usar clases con nombres idénticos en distintas bibliotecas sin colisiones de nombres. Vea la documentación de PHP.

Presenter

Un presenter es un objeto que toma la 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.

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

Router

Un 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 deducir una presenter action y, al revés, generar para una acción la URL correspondiente. Más en el capítulo sobre el enrutamiento de URL.

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

Servicio

En el contexto de Dependency Injection, un servicio es un objeto que crea y administra el contenedor DI. Un servicio se puede sustituir fácilmente por otra implementación, por ejemplo para hacer pruebas o para cambiar el comportamiento de la aplicación, sin necesidad de modificar el código que usa el servicio.

Snippet

Un snippet, una parte de la página que se puede redibujar de forma independiente durante una petición AJAX.

View

La view es la capa de la aplicación que se encarga de mostrar el resultado de una petición. Suele usar un sistema de plantillas y sabe cómo mostrar los distintos componentes o los resultados obtenidos del model.

versión: 4.x