Usuario:ManuelRomero/Laravel/routing

De WikiEducator
Saltar a: navegación, buscar
Road Works.svg Trabajo en proceso, espera cambios frecuentes. Tu ayuda y retroalimentación son bienvenidos.
Ver página de charlas.
Road Works.svg





Qué es routing




Icon key points.gif

URL Vs Ruta (route)

  • Una aplicación web es invocada mediante una solicitud http que normalmente llamamos una URL


  • En las aplicaciones que venimos desarrollando en el curso el proceso de ejecución de un recurso web de forma básica es:
  • 1.-El cliente escribe una url solicitando una página web o php p.e.
http://localhost/paginaPrincipal.php
  • 2.-Ahora el servidor web procesa la petición ejecutando el fichero php y retornando una página web al cliente.
Icon present.gif
Tip: Entendemos que existe un fichero en el servidor con el nombre paginaPrincipal.php


  • Es esta la primera diferencia que podemos encontrar con una aplicación web tradicional de PHP como hemos venido trabajando a lo largo del curso
  • Ahora no vamos a funcionar exactamente así en la parte del servidor
  • Meditante el routing, vamos a especificar los diferentes recursos que nuestrta aplicación va a atender como solicitudes http
  • Esto se hará en un único fichero donde se especifican estas rutas web.php de modo que todo lo relacionado con las rutas esté ahí especificado
/routes/web.php
Icon present.gif
'Tip: Versiones anteriroes a 5.3, estaría en el directorio /app/Http/routes.php




Icon define.gif
Una ruta en laravel
Una ruta Laravel es una URL de solicitud web que accede a una página o recurso web particular de la aplicación.


Diferentes ficheros de rutas


Contenido de routes.php


  • En él puede estar directamente el contenido que se va a servir ante una ruta o solicitud o se especificará mediante un controlador dónde se obtendrá dicho contendido
  • El cliente escribirá una ruta a la que quiere acceder en forma de URL y la aplicación en buscará dicha ruta en el fichero route.php.
  • Una aproximación (en realidad hay muchos ficheros que se ejecutan entre medias. ver ciclo de vida de una aplicación laravel), podemos ver en la siguiente imagen

SolicitudRoute.png

  • Hay diferentes maneras de especificar estas rutas en el fichero web.php, como vamos a ver a continuación

Especificando la ruta en Laravel


  • Para ello se usa la clase Router
https://laravel.com/api/5.8/Illuminate/Routing/Router.html
  • Para agilizar su uso usamos lo que en laravel se conoce como Facade


Icon define.gif
Facade
  • Una facade es una interfaz estática de una clase de sevice container



  • De esta forma no tendremos que instaciar un objeto de la clase Router
https://laravel.com/api/5.8/Illuminate/Routing/Router.html
  • Esta clase tiene una serie de métodos para especificar las rutas que corresponden al tipo de solicitud http que se hace al servidor
  • Estos métodos son palabras (verbos) que representan el tipo de solicitud http que se hace al servidor.(Ver protocolo http para este cometido).
  • Se suele usar get(), para solicitudes de páginas que no envían datos y post() si se envían datos
  • Aquí una lista de posibles verbos a utilizar
<? php
// app/web.php
Route::get($uri, $callback);
Route::post($uri, $callback);
Route::put($uri, $callback);
Route::patch($uri, $callback);
Route::delete($uri, $callback);
?>
  • También podemos tener verbos o métodos flexibles que veremos posteriormente
Route::options($uri, $callback);//MRM ?
Route::match(['get', 'post'], '/', function () {
    //
});
Route::any('foo', function () {
    //
});
  • El método especificado recibe dos parámetros:
  1. El URL o URI que el cliente solicitará
  2. Especifica la acción que se va a realizar para retornar un contenido al cliente según la url solicitada.
  • En función de como se especifique esta acción tenemos diferentes formas de hacer Routing, objeto de estudio de los siguientes apartados

Routin básico : funciones anónimas o Clousuras


Una función anónima que se ejecutará y dará el contenido (En el routing básico)

route::get("principalGet", function(){
       return ("Estás en la página principal con método GET");
});
route::post("principalPost", function(){
       return ("Estás en la página principal con método POST");
});
route::get("principalGetOrPost", function(){
       return ("Estás en la página principal con método GET o POST");
});
  • En este primer caso vamos a probar el ejemplo.
  • Primero levantamos el servidor que viene con laravel en el puerto 8000
  • Para ello usamos los comandos de artisan
php artisan serve
  • Y vemos la siguiente salida, que responde al route con la URL /
Laravel development server started on http://localhost:8000
LaravelLocalhost.png
  • A continuación escribimos la ruta a la que queremos acceder. En nuestro caso hemos detallado tres rutas, que serían las páginas de nuestra aplicación:
  1. principalGet
  2. principalPost
  3. principalGetOrPost

http://localhost:8000/principalGet

  • Y sale el contenido indicado

Archivo:RouteBasica.png



Icon summary.gif

Resumen

  • Las rutas se especifican en el fichero ./app/Http/routes.php




Icon summary.gif

Resumen

  • Se especifica la clase route con los métodos get() o post() o any() principalmente




Icon summary.gif

Resumen

  • En su uso básico especificamos dos argumentos al método: una URI y una Closure o función anónima


  • Lógicamente las rutas con método post no los visualizaremos directamente desde el navegador. es decir si escribimos
http://localhost:8000/principalPost
  • No me aparecerá, y si vemos los errores, veremos que aparece un acceso no permitido
  • Podemos comprobarlo con curl en línea de comandos
 curl -d "" http://localhost:8000/principalPost


  • Ver el sigueintes tutorial:



Pasando parámetros a las rutas


  • Parte de la ruta puede ser parametrizada
  • Se especifica el parámetro en la ruta
  • Se usa como parámetro de la función anónima
route::get("noticas/{num}", function($num){
       return ("Estás en la noticia número ".$num);

Escribiendo este codigo podemos acceder a las siguientes URL's*

  1. http://localhost:8000/noticias/1
  2. http://localhost:8000/noticias/1000
  3. http://localhost:8000/noticias/pepito
  • Y nos saldría la información correspondiente
  • Podríamos querer limitar el parámetro a un tipo de valores concreto (por ejemplo en este caso a número)
  • Lo podemos hacer usando expresiones regulares con el método pattern'
Route::pattern('num', '[0-9]+');
 
Route::get("noticias/{num}", function($num){
       return ("Estás en la noticia número  -".$num);
});
  • En este caso solo funcionará en la última parte de la url sea un número
  • Parámetros con valores por defecto por si no se aportan
Route::get('noticias/{nombre?}', function($name = 'deportes')
{
    return ("Estás en las noticias de tipo ".$name);
});

Restricciones


  • Parámetros con restricciones de valor (si es número ...., si es caracteres ... ...)
  • En este caso solo se aplica al parámetro de la ruta.
Route::get('noticias/tipo/{nombre}', function($nombre)
{
   return("Ahora estás viendo las noticias ".$nombre);
})
->where('name', '[A-Za-z]+');
 
Route::get('noticias/{num}', function($num)
{
       retunr("Ahora estás en la noticia número ".$num);
})
->where('id', '[0-9]+');