Llevar un proyecto PHP del terminal al navegador pone a prueba la calidad de tu arquitectura. Si aplicaste separation of concerns e dependency injection, reutilizar código para una interfaz web se vuelve casi trivial. Aquí verás cómo adaptar un chat con inteligencia artificial para que funcione desde un formulario HTML sin romper la lógica existente.
¿Cómo preparar la estructura del proyecto para web?
El primer paso consiste en crear una carpeta public que aloje el archivo index.php. Esa carpeta funciona como punto de entrada del servidor web, igual que el ejecutable binario lo hace en el terminal.
Dentro de index.php recuperas la misma instancia que ya devuelve la fábrica del chat. La diferencia está en que no puedes invocar la acción que arranca el ciclo del terminal, porque esa lógica espera entrada por consola. Necesitas otra puerta de entrada que reciba la pregunta desde un formulario.
¿Por qué crear una carpeta public? Porque separa los archivos accesibles desde el navegador del resto del código. Así el servidor solo expone lo necesario y el resto queda protegido.
¿Cómo capturar la pregunta desde un formulario HTML?
La idea es sustituir la entrada del terminal por un formulario que envíe datos vía POST al mismo documento. Para eso preparas dos variables: una para la pregunta y otra para la respuesta, ambas vacías por defecto.
La condición que dispara la llamada al servicio combina dos verificaciones:
- Que la petición llegue por método
POST.
- Que el campo de pregunta no venga vacío.
Solo cuando ambas se cumplen, el método del chat se ejecuta y genera la respuesta. Esto evita llamadas innecesarias a la inteligencia artificial cuando alguien carga la página por primera vez.
¿Qué etiquetas HTML usar para el formulario?
El formulario no necesita atributo action porque el envío se procesa en el mismo archivo. Basta con definir method="post", una etiqueta para la pregunta, un campo de texto y un botón con el texto «Perguntar».
Para mejorar la experiencia, agregas el atributo required al campo de entrada. Así el navegador bloquea envíos vacíos antes de llegar al servidor.
¿El atributo required reemplaza la validación en PHP? No. La validación visual mejora la comunicación con el usuario, pero la validación del lado del servidor sigue siendo obligatoria porque cualquiera puede saltarse el HTML.
¿Cómo refactorizar la clase chat para reutilizar el servicio?
Al intentar llamar a un método para obtener la respuesta desde el formulario, aparece un error: ese método no existe en la clase chat. La solución pasa por una refactorización pequeña pero significativa.
Dentro del servicio ya existe getResponse, pero el chat lo invocaba directamente. Ahora creas un método público en la clase chat que actúa como intermediario hacia el servicio. Con esto consigues:
- Encapsular la conexión al servicio dentro de la propia clase.
- Que el flujo del terminal siga funcionando sin cambios.
- Que el formulario web use exactamente el mismo método.
El chat deja de depender directamente de getResponse del servicio y empieza a usar su propio método, que internamente sí se conecta al servicio. Es una capa extra de abstracción que paga dividendos cuando reutilizas código.
¿Cómo proteger la salida contra código malicioso?
La respuesta que llega de la IA o del propio campo del formulario puede contener etiquetas HTML. Para evitar que el navegador ejecute código no deseado, pasas la variable por una función que convierte esas etiquetas en entidades HTML.
De esta forma, si alguien intenta inyectar un <script>, se renderiza como texto plano en lugar de ejecutarse. Es una práctica básica de seguridad que nunca deberías saltarte cuando muestras contenido dinámico.
¿Qué ganas con esta arquitectura reutilizable?
El resultado es una lógica lista para responder que vive en un único lugar y se consume desde múltiples interfaces. El index.php web y el sistema del terminal apuntan al mismo método del chat, que a su vez delega en el servicio.
Esa cadena de responsabilidades, sumada a la inyección de dependencias y a la separación por clases, es lo que permite crear snippets de código reutilizables. Cuando alguien te pida una versión móvil, una API o un bot, no reescribes la lógica: la conectas.
Como desafío final, mejora el diseño del formulario con Tailwind y comparte tu resultado en los comentarios. El verdadero poder del PHP está en su comunidad, así que sigue practicando y nos vemos en los próximos cursos.