Configuración de Controladores y Respuestas en PHP
Resumen
¿Cómo funcionan los controladores en un sistema web?
Los controladores son una parte crucial de cualquier aplicación web, aunque su concepto puede llevar a malentendidos. A menudo se dice que un controlador actúa como un intermediario entre el modelo de datos y la vista que se presenta al usuario. Sin embargo, este enfoque puede ser limitante si no se entiende correctamente. Un controlador, en realidad, gestiona lo que el usuario necesita, procesa la solicitud y retorna la respuesta adecuada, sin necesariamente acceder a una base de datos. Veamos cómo se configura y utiliza un controlador dentro de un sistema web.
¿Cómo comenzar a configurar el sistema?
Todo en nuestro sistema comienza en el archivo index. Aquí, se llama al sistema de autocarga de Composer y se ejecuta la primera clase, la clase de peticiones (request). En esta clase, se ha configurado un método llamado send que se encarga de ejecutar toda la configuración requerida.
classRequest{publicfunctionsend(){// Configuración para gestionar la petición}}
Las propiedades necesarias se inician vacías y se llenan utilizando un constructor, ejecutando métodos específicos para procesar la información del usuario.
¿Qué papel juegan los controladores?
El controlador se encarga de realizar llamadas al componente de respuesta (response). Aquí es donde se aprovecha la información ya procesada. Un controlador típico está diseñado para retornar la vista adecuada según la solicitud del usuario.
Para configurarlo:
Nombre del archivo: De acuerdo con el estándar de configuración, un archivo para el controlador podría llamarse HomeController.php.
Ruta del controlador: La ruta completa para el controlador comienza desde el directorio app, por ejemplo, app/http/controllers/HomeController.php.
¿Cómo retornar las respuestas adecuadas?
El controlador, al realizar la gestión correcta de la petición, se encarga de retornar la clase Response que, a su vez, se encarga de enviar la vista correcta al usuario.
Para configurarlo correctamente:
Configuración de la clase Response:
Se puede lograr incluyendo un backslash para asegurar que la ruta comience desde la raíz.
Alternativamente, se puede usar la declaración use en la parte superior del archivo.
Al optar por cualquiera de estas configuraciones, se asegura la correcta referencia a la clase Response que tiene incorporado el método send para cargar las vistas.
¿Qué debemos esperar al ejecutar nuestra configuración?
Al ejecutar el sistema, la clase Response busca cargar las vistas definidas en los controladores. Si alguna vista no existe, es importante revisar el nombre de los archivos y su ubicación. Esta implementación del controlador y la gestión de las respuestas garantizan que el flujo del sistema brinde la experiencia de usuario deseada.
Recuerda, tanto la declaración use como el uso del backslash cumplen el mismo propósito de corregir errores de referencia. Así, podrás continuar configurando el sistema progresivamente, asegurando que todo fluya correctamente para que cuando un usuario requiera algo, el sistema responda según lo esperado.
Con esta guía, estás listo para integrar y ajustar tus controladores con confianza. No olvides dejar cualquier pregunta que tengas y seguir practicando para dominar el flujo de controladores y respuestas en tu aplicación web. ¡Nos vemos en la siguiente clase!
Un controlador, como su nombre lo dice, es una clase que se encarga de hacer todo el procesamiento del request del usuario, ahí es en donde en la mayoría de las veces ejecutaremos la lógica, y por su puesto, se retorna el resultado, en este caso, una vista.
Como se retorna una instancia de Response, entonces tenemos acceso a todos los datos de la vista que mandamos desde la misma clase.
Esta es una forma de programación mucho más limpia y ordenada, siempre me gustó trabajar así <3
Me queda una inquietud: en el caso del modelo, cómo interactúa el controlador en este caso? Tenía entendido que el modelo era una especie de abstracción que implicaba algún proceso en base de datos.
Me costo tanto entender porque la variable $response podia invocar al metodo send, tuve que repetir el video tantas veces hasta que me di cuenta que era porque el controlador estaba estaba retornando una intancia de Response, no habia entendido que ese metodo index del controlador se invocaba solo, me sentia tan perdido.
Me pasó exactamente lo mismo, no seguí hasta que lo pude entender a cabalidad jaja. Saludos.
Igual, me paso lo mismo hasta que por fin lo entendí
Les recomiendo los videos de laracast.com
"... siempre se dice que el Controlador está entre el modelo de datos y eso que se quiere visualizar ..." la famosa arquitectura MVC … 🤔
Aporte de la clase 💚
!Imgur
💡 El Rol del Controlador
!Imgur
📑 Descripción
!Imgur
El controlador es la parte de nuestro programa que se encarga de moderar las peticiones de los usuarios, realizar las operaciones convenientes para satisfacer esa petición ya sea agregando, modificando, extrayendo o eliminando datos de nuestra BD, o en algo más simple devolver una vista al usuario para continuar con la interacción con el sistema.
!Imgur
📋 Código
!Imgur
Se dan cuenta que hace como 4 videos que siempre termina con un error el video?
veo en los comentarios que hay confusión con la variable $response de la clase request así que detallare el flujo
index.php->instancia la clase de request.php y usa el metodo send().
el metodo send() obtiene el nombre del controlador y el método que solicita el usuario de manera dinámica con la url y hace uso del método call_user_func que permite ejecutar archivos y métodos dados
el metodo call_user_func provoca que vaya al archivo HomeController y ejecuta el método index que retorna una instancia de la clase response y gracias a esto más adelante se puede ejecutar el método send() de la clase respone
El error correcto, suele suceder que a veces esperamos cierto error para saber que todo va bien, gracioso
Tengo un problema, estoy cargando la raíz del proyecto tanto en local como en un servidor web y solo me carga la lista de ficheros y carpetas que están dentro del proyecto.
Si ingresan a esta url se ve claramente https://frameworks.navdigital.cl/
Ingresé a la carpeta public que es donde se encuentra el archivo index y me carga este error que entiendo es porque al poner public en la raíz entiende que PublicController no existe
Según entiendo al cargar la raíz del proyecto debiese cargar el sitio directamente pero me pregunto ¿cómo sabe el proyecto que el archivo que debe cargar está en public?
¡Hola!, es porque no siempre es así, es decir, no siempre se va a cargar la raíz del proyecto, lo que se tiene que cargar es la carpeta public porque ahí está tu index.html.
Sería realmente malo si cargaras directamente la raíz del proyecto porque entonces cualquier persona podría ver tu código entrando a tus carpetas (por eso es que siempre se carga public)
NO tienes que entrar a public, tienes que hacer que tu servidor apunte directamente a la carpeta public, es decir, la carpeta public debe ser la raíz de tu dominio, es decir, tu URL "https://frameworks.navdigital.cl/" debe cargar como carpeta raíz a la carpeta public NO a la carpeta de tu proyecto entero.
Es una práctica de seguridad, ya que si tu dominio toma como carpeta raíz a public entonces tu dominio no podrá ver qué hay antes de esa carpeta, por lo que nungún usuario podrá acceder a ellas :D
@RetaxMaster gracias nuevamente por tu respuesta, la verdad no se como apuntar el proyecto a public, ni en local ni en el servidor. ¿Conoces algún artículo que lo explique? Lo otro te había hablado justo por Twitter para saber si me podías ayudar con esto 😅
Aprender este lenguaje en la forma en que el profesor la explica, a puesto a prueba mi paciencia, razonamiento, comprensión y perseverancia porque todo al principio es bastante nublado, sin embargo a medida que avanza cada clase todo se va despejando y al final encuentras una gratificante satisfacción al ver que lograste entender y comprender el objetivo de cada clase.
Gracias Platzi!!
Es recomendable que hagan ensayos cada capitulo del curso, ya que cada 5 caps. hacen un ensayo de si funciona el código, y uno no sabe que error tiene, y toca revisar todo el programa
En varios videos estan los archivos donde los puedes descargar y comparar
Se puede llegar a presentar algún problema con el namespace App\Http\Controllers, cuando realmente la carpeta app, inicia con minúscula.
¡Hola!, no, ya que eso lo especificamos en el archivo composer.json al decir que el namespace App corresponde a la carpeta "app" ^^
Tengo una consulta me sigue saltando este error y no se como solucionarlo "Uncaught Error: Class "App\Http\Controllers\IndexController" not found in /home/agustin/escuela-php/intro-frameworks-php/app/Http/Request.php:46"
Aca tengo mi archivo request por si a alguno puede dar feedback.
$response guarda una instancia de la clase Response seteado por el método del controlador correspondiente.... waooo! <3
El flujo de la solicitud es :
Llama al Request ingresando el $_SERVER[‘REQUEST_URI’], el Request al Controller Especifico que llegó por URI, ese controller especifico ejecuta el Response y este a su ves llama a la View el paso ahora es desarrollar la View, por lo menos la Home