El Protocolo de transferencia de hipertexto (HTTP) es un protocolo de comunicación entre un cliente y un servidor. El cliente solicita un recurso del servidor enviando una solicitud y el servidor responde enviando una respuesta, generalmente una página HTML.
Cuando navegamos por Internet, cada uno de nuestros clics suele provocar este intercambio y, en general, una explosión de intercambios.
La solicitud del cliente contiene una cierta cantidad de información (encabezados, código de estado, cuerpo...).
Por supuesto, hay muchas otras cosas en los encabezados (tipo de contenido, cookies, codificación...) pero por el momento estaremos contentos con esta información. Nuestro navegador digiere todo esto de manera transparente, ¡afortunadamente para nosotros!
Nuestra aplicación Laravel debe saber interpretar la información que llega y utilizarla de manera relevante para devolver lo que el cliente solicita. Veremos cómo se logra esto.
Los métodos
Nuestra aplicación Laravel debe saber interpretar la información entrante y utilizarla de forma relevante para devolver lo que el cliente solicita.
Es fundamental conocer los principales métodos de HTTP :
GET : este es el más común, solicitamos un recurso que nunca cambia, podemos memorizar la solicitud, estamos seguros de obtener siempre el mismo recurso,
POST : también es muy común, allí la solicitud modifica o agrega un recurso, el caso más clásico es el envío de un formulario (muchas veces mal utilizado en lugar de PUT),
PUT : agregamos o reemplazamos completamente un recurso,
PATCH : un recurso se modifica parcialmente (por lo tanto, no debe confundirse con PUT),
DELETE : se elimina un recurso.
.htaccess e index.php
Para Laravel, queremos que todas las consultas terminen en el archivo index.php en la carpeta públic. Para llegar allí podemos usar una URL como esta:
http: //misitio.es/index.php/mipagina
Pero no es muy estético con este index.php en el medio. Si tiene un servidor Apache, cuando la solicitud del cliente llega al servidor donde se encuentra nuestra aplicación Laravel, primero pasa por el archivo .htaccess , si existe, que establece las reglas para el servidor. Hay un archivo .htaccess en la carpeta pública de Laravel con una regla de reescritura para que podamos tener una URL simplificada:
http: //misitio.es/mipagina
Un pequeño diagrama para visualizar esta acción:
Para que esto funcione, el servidor Apache debe tener activado el módulo mod_rewrite .
El ciclo de consulta
Cuando la solicitud llega al archivo public/index.php , se crea y configura la aplicación Laravel y se detecta el entorno. Volveremos a estos pasos con más detalle más adelante. Luego se carga el archivo route/web.php . Aquí está la ubicación de este archivo:
Los otros archivos se relacionan con rutas más específicas, como API con el archivo api.php o rutas para acciones de línea de comando con el archivo console.php .
Es con este expediente que la solicitud será analizada y dirigida. Veamos lo que encontramos allí al principio:
Route::get('/', function () {
return view('welcome');
});
Como Laravel se explica por sí mismo, ya puedes adivinar para qué sirve este código:
Route : usamos el enrutador,
get : comprobamos si la petición tiene el método “get”,
'/' : verificamos si la url contiene solo el nombre de dominio,
en la función anónima devolvemos ( return ) una vista ( view ) del archivo de “bienvenida”.
Este archivo de "bienvenida" está perfectamente almacenado en la carpeta de vistas:
Es este archivo con código Html el que genera el texto de bienvenida que obtienes cuando inicias Laravel por primera vez:
Laravel ofrece varios ayudantes que simplifican la sintaxis. Por ejemplo, hay una vista para la clase View como se ve en el código anterior.
Visualicemos el ciclo de consulta:
En su servidor local no tiene un nombre de dominio y utilizará una URL de la forma http: // localhost / tuto / public, suponiendo que haya creado Laravel en una carpeta www / tuto. Pero también puede crear un host virtual para tener una situación más realista como ya se mencionó.
Laravel acepta los siguientes verbos: get , post , put , patch , delete , options , match (para proporcionar varios verbos) y any (se aceptan todos los verbos).
Laravel acepta los siguientes verbos: get, post, put, patch, delete, options, any (aceptamos todos los verbos).
La ruta más básica en Laravel únicamente acepta la URI y un Closure, ofreciendo una forma muy sencilla y expresiva de definir rutas:
El archivo de rutas por defecto
Todas las rutas de Laravel se definen en los archivos que se encuentran en la carpeta routes. El framework carga estos archivos de forma automática. El archivo routes/web.php define las rutas para la interfaz web. A estas rutas se les asigna el grupo de middleware web, el cual proporciona algunas características como el estado de la sesión y la protección CSRF. Las rutas en routes/api.php no tienen estado y se les asigna el grupo de middleware api.
Para la mayoría de aplicaciones, se comenzará definiendo las rutas en el archivo routes/web.php.
Se puede acceder a las rutas definidas en routes/web.php simplemente escribiendo la URI definida en el navegador. Por ejemplo, se puede acceder a la siguiente ruta simplemente accediendo a http://tu-app.dev/user desde el navegador:
Verbos HTTP
Los métodos o verbos HTTP podrían llevarse un post completo, pero en resumen hay “verbos” que indican lo que se desea hacer. Entre ellos encontramos:
get: normalmente para obtener recursos o valores
put: verbo usado para editar
post: cuando vamos a agregar algo nuevo, normalmente un insert si lo vemos desde las bases de datos. Con este método se envían los formularios.
delete: cuando vamos a eliminar algo.
Múltiples rutas y configuración de rutas
Tras la instalación, Laravel tiene una ruta única que corresponde a la URL base compuesta solo por el nombre de dominio. Ahora veamos cómo crear otras rutas. Imagina que tenemos 3 páginas que deben mostrarse con estas urls:
http://monsite.fr/ 1
http://monsite.fr/ 2
http://monsite.fr/ 3
He resaltado en negrita la parte específica de la URL de cada página. Es fácil lograr esto con este código:
Route::get ( '1' , function () { return '¡Soy la página 1!' ; }) ;
Route::get ( '2' , function () { return '¡Soy la página 2!' ; }) ;
Route::get ( '3' , function () { return '¡Soy la página 3!' ; }) ;
Esta vez no creé una vista porque lo que nos interesa solo es resaltar el enrutamiento, por lo que devuelvo la respuesta directamente al cliente. Visualicemos esto para la página 1:
Solo necesitamos el carácter "/" en la ruta base.
Ahora podemos hacernos una pregunta: ¿realmente es imprescindible crear 3 rutas cuando la única diferencia es muy poca: un valor que cambia?
Decimos que la ruta está establecida porque tiene un parámetro que puede tomar cualquier valor.
Puede usar un parámetro para una ruta que acepte elementos variables usando llaves. Mira este código:
Route::get('{n}', function($n) {
return 'Soy la pagina ' . $n . ' !';
});
Y una visualización de cómo funciona:
Decimos que la ruta está parametrizada porque tiene un parámetro que puede tomar cualquier valor.
Puede hacer que un parámetro sea opcional agregándole un signo de interrogación, pero no debe ir seguido de un parámetro obligatorio. En este caso, para evitar un error de tiempo de ejecución, se debe proporcionar un valor predeterminado para el parámetro, por ejemplo:
Route::get('{n?}', function($n = 1) {
El parámetro n se ha vuelto opcional y por defecto su valor es 1.
Error de tiempo de ejecución y restricción de ruta
En mi doble ejemplo anterior cuando digo que el resultado es el mismo miento un poco. ¿Qué sucede en ambos casos para esta url?
localhost/laravel/Proyecto/public/4
En el caso de las tres rutas te encuentras con un error: ¡En cambio en la versión con el parámetro obtienes una respuesta válida! Lo cual tiene sentido porque se encuentra una ruta. El parámetro acepta cualquier valor, no solo números. Por ejemplo con esta url:
localhost/laravel/Proyecto/public/cualquier cosa
Usted obtiene :
¡Soy la página cualquier cosa!
Para evitar este tipo de inconvenientes, se debe forzar el parámetro para que acepte solo ciertos valores. Esto se hace usando una expresión regular.
Expresiones Regulares
Es posible limitar el formato de los elementos dentro de los parámetros de una ruta usando el método where en una instancia de Route. El método where acepta el nombre del parámetro y la expresión regular que define como se debe limitar el parámetro:
Route::get('{n}', function($n) {
return 'Je suis la page ' . $n . ' !';
})->where('n', '[1-3]');
¡Ahora puedo decir que los comportamientos son idénticos! Pero tendremos que solucionar el problema de las rutas no planificadas.
Ruta con Nombre
A veces es útil nombrar una ruta, por ejemplo, para generar una url o para realizar una redirección. La sintaxis para nombrar una ruta es:
Route::get('/', function() {
return 'Soy la pagina de inicio!';
})->name('home');
Por ejemplo, para generar la url correspondiente a esta ruta, puede usar el asistente de ruta:
route('home')
Lo que generará la URL base del sitio en este caso: localhost/laravel/Proyecto
Una ventaja de usar rutas con nombre es que puede reorganizar las URL de un sitio sin tener que cambiar mucho código.
Orden de las rutas
¡Una cosa importante para saber es el orden de las rutas!
Lea esto detenidamente para no tener que preocuparse por horas de investigación y dolores de cabeza. La regla es:
Las rutas se analizan en su orden en el archivo de ruta.
Mira estos dos caminos:
Route::get('{n}', function($n) {
return 'Soy la pagina ' . $n . ' !';
});
Route::get('contact', function() {
return Este es mi contacto.";
});
También podemos agrupar rutas para simplificar la sintaxis, pero lo veremos más adelante...
En resumen
Laravel tiene un archivo .htaccess para simplificar la escritura de URL.
El sistema de enrutamiento es simple y se explica por sí mismo.
Los parámetros se pueden proporcionar en las rutas.
Puede forzar un parámetro para que coincida con una expresión regular.
Puede nombrar una ruta para facilitar la generación de URL y los redireccionamientos.