Configuración del Método Send en Clases PHP para Peticiones
Resumen
¿Cómo configurar el método send en una clase request?
En esta sección, nos adentramos en la configuración del método send dentro de una clase request para gestionar eficientemente las peticiones de los usuarios. Este método es crucial para disparar el evento adecuado una vez que la información ha sido configurada, permitiendo así la correcta ejecución de controladores en una aplicación web.
¿Cómo comenzar con la configuración inicial?
Todo comienza en el índice de nuestra aplicación, donde inicializamos la clase request. Esta clase actúa como la administradora de las peticiones. Aquí configuramos propiedades utilizando métodos set para asignarles valor. Este es un proceso esencial para cargar y almacenar información.
¿Cómo obtener la información configurada?
Para obtener la información que configuramos, utilizamos métodos get. Aquí es donde estructuramos las cadenas que representan a nuestros controladores. Por ejemplo, convertimos el contenido de la propiedad controller a un formato estándar donde la primera letra es mayúscula.
Utilizamos el método ucfirst() para garantizar que la primera letra del nombre del controlador sea mayúscula, adherirse a los estándares y facilitar su recuperación y ejecución.
¿Cómo se configuran y disparan las peticiones?
El método send actúa como nuestro método de acción final. Aquí es donde configuramos el controlador y el método, los guardamos en variables y usamos una función nativa de PHP para ejecutar el archivo. Es indispensable que comprendamos cada paso para poder ejecutar nuestras peticiones correctamente.
En este bloque de código, la función call_user_func_array nos permite ejecutar el controlador y método deseados, asegurando que las peticiones se procesen como esperamos.
¿Cuál es la importancia de una clase request bien configurada?
Una clase request correctamente configurada no solo permite realizar ajustes y pruebas fácilmente, sino que también mejora la eficacia de las peticiones, evitando errores y asegurando que el flujo de la aplicación sea el esperado. Esta configuración permite que al modificar en el índice la petición, se pueda probar cómo ésta es manejada por la clase request.
Aprender a configurar este tipo de clases correctamente es fundamental para cualquiera que busque crear aplicaciones web eficientes y escalables. Te animamos a experimentar con esta configuración y compartir tus resultados y dudas, para seguir aprendiendo juntos.
En resumen, lo que hace la clase Request es obtener de la URL, qué es lo que el usuario quiere visualizar, entonces, de manera dinámica esta clase busca los controladores necesarios para servirle la respuesta al usuario, realmente lo que se hace es concatenar el controlador pasado en la URL con la palabra Controller para crear el nombre del archivo que debemos mandar :D
Gracias por la explicación.
Esta explicaión fue necesaria en el curso "intermedio de PHP"
Con la función call_user_func() se puede ejecutar un método de una clase, ver el siguiente ejemplo:
Para los que trabajan con XAMPP, al momento de pasar los parámetros el servidor lo toma como una dirección ( no como parámetros) y te manda una página 404NotFound.
Para resolverlo:
Crea un archivo .htaccess en la carpeta raíz del projecto (al mismo nivel del composer.json).
Este es un archivo de texto que configura la forma en que tu servidor web responde a las peticiones de los usuarios.
Ahora si te va funcionar el código :) espero haberte ahorrado 3 horas de debuggeo intenso y cuestionamiento de elección de carrera ajajajajaja
set =Tiene el objetivo de llenar de datos a esas propiedades.get=Obtiene la información configurada.send=Es nuestro método de acción que ejecuta la petición del usuario.
Al escribir contactos en la url me arroja esto.
no se si se me paso alguna configuración
Si estas usando XAMPP, lo mas probable es que sea el archivo .htaccess, yo lo tengo de esta manera y lo agregue en la carpeta raíz para que me redireccione directo al index.php de la carpeta public:
No me gustan las clases de este profesor, siento que empieza a explicar el como hacer las cosas pero no especifica ni siquiera que estamos haciendo, o sea ni siquiera nos muestra un vistazo al principio del curso de que es lo que quiere hacer y eso es muy molesto, porque empieza a hacer codigo pero uno ni siquiera saber que es el resultado de lo que programa. es el unico profesor que no explica para que se hacen las cosas sino que de una vez empieza a programar, que estres.
Los que estamos viendo este curso en 2023, tenemos menos problemas, ya que en el curso del profe retax nos enseñaron a configurar los host virtuales y el archivo htaccess:
del curso Curso de PHP: Entornos Virtuales y Funciones Avanzadas
Para poder realizar este ejercicio en una configuración LAMP, usé
array(5) { [0]=> string(0) "" [1]=> string(9) "workspace" [2]=> string(6) "public" [3]=> string(9) "index.php" [4]=> string(9) "contactos" }
Fatal error: Uncaught Error: Class 'App\Http\Controllers\ContactosController' not found in /var/www/apache2/workspace/app/Http/Request.php:41 Stack trace: #0 /var/www/apache2/workspace/public/index.php(11): App\Http\Request->send() #1 {main} thrown in /var/www/apache2/workspace/app/Http/Request.php on line 41
de modo que en el array segments use la pocisión 4 para establecer el controlador y la 5 para establecer el metodo.
Según la documentación de PHP, la función call_user_func(), sirve para utilizar callbacks dentro del lenguaje, como primer parámetro recibe la función que recibiría como parámetro el callback y, a partir del segundo en adelante le podemos incrustar el callback como tal y otros parámetros que se necesiten.
El profesor solo manda un Array, no entiendo esto. 😭
¡Hola! No te preocupes, es un asunto de PHP POO, te explico:
La función call_user_func necesita que le pases una función para llamar, pero en este caso estamos usando POO, por lo que no tenemos funciones simples, sino que tenemos métodos, es decir, no podemos hacer esto:
call_user_func('index')
El método index pertenece a una clase de controlador, por lo que deberíamos hacer algo como esto:
call_user_func($controller->index)
Pero esto no es posible porque en PHP esta sintaxis no es válida, es decir, daría un error. Y tampoco lo podemos poner entre comillas:
call_user_func('$controler->index')
Porque PHP buscaría una función que se llame literalmente $controller->index (no ejecutaría el código para acceder a la clase, sino que buscaría literalmente una función que se llame así, y no existe y daría error).
¿Entonces cómo le hacemos para pasarle un método a la función'n call_user_func? Simple, le mandamos un array:
call_user_func([new $controller, $method])
En PHP es una convención que si tú mandas un array en donde debería ir una función PHP lo va a tomar como que es un método de una clase e internamente mandará a llamar a ese método de esa clase. Así es la sintaxis de PHP :D
Genial pero, no me queda muy claro lo de index, es decir, ¿más adelante definiremos un método llamado index?
Buenas tardes,
Tras seguir los pasos del profesor, mismo código, me aparece este mensaje de error:
Fatal error: Uncaught Error: Class 'app\Http\Request' not found
¿Alguien podría ayudarme a solverntarlo? Gracias de antemano!
Lo que te dice el error es que no encuentra un archivo que esta en la dirección "app\Http\Request" dentro de tu directorio local. Checa haber si te falto poner una dependencia o algo así
Buenas tardes,
Tras realizar varias comprobaciones, he detectado que el error provenía de que al realizar la creación del fichero "Request.php" se me insertó como hijo de la carpeta "Controllers" en lugar de colocarse en "Http".
En la variable local del método send: controller, se guarda el contenido del atributo controller (propio de la clase) a través del método getController(), ok, lo entiendo.
Lo que no entiendo es por qué se guarda en response un array con una "instancia" (new) de la variable local $controller (del método send), cuando la variable local $controller ya tiene guardado el string con la ruta hacia el controlador.
Según entiendo call_user_func va a tomar el archivo (Controller) que se determine según el string que se guarde en la variable $controller, y a ejecutar el método que se determine en la variable $method; asumiendo esto, también me queda la duda de qué función tiene la línea: $response->send()
Quiero pensar que la variable $reponse ya trae la ruta del controlador, y que ese controlador debería tener un método llamado send(); lo que significa que como el controlador es una clase, send() es un método dentro de esa clase (controlador); pero entonces, en este punto qué pasa con el método que solicitó el usuario a través de la URL?
De antemano gracias a quién pueda responder estas dudas, saludos a todos!!!
En la línea 37, para evitar que se rompa por venir el método o controlador en mayúscula (ej. /SERVICIOS/METODO ) es mejor colocar ucfirst(strtolower($this->controller)).
Hay varias Maneras Para llamar a los controladores en php, sin embargo esta me parece Increíble el paso para llamar al controlador y a su metodo, Laravel Usa por defecto los Resource Controllers que se usan para CRUDS y entender como funcionan las peticiones me parece fundamental en dicho framework
resumen patatero, request response, forma parte del estándar http cualquier framework o lenguaje del lado de servidor(python, laravel, go, etc) usa esto y en resumen cosiste en:
request: toda la información enviada desde el cliente , pueden ser json ,formularios, xml , datos en bruto
response: el método por el cual se genera una respuesta para el cliente con la información obtenida y procesada
si estas en windows usando xampp sigue los siguientes pasos:
Al momento de pasar los parámetros el servidor lo toma como una dirección ( no como parámetros) y te manda una página 404NotFound. Para resolverlo:
Crea un archivo .htaccess en la carpeta raíz del projecto (al mismo nivel del composer.json). Este es un archivo de texto que configura la forma en que tu servidor web responde a las peticiones de los usuarios.