Diferencia entre revisiones de «Usuario:ManuelRomero/Laravel/routing»

De WikiEducator
Saltar a: navegación, buscar
(Pasando parámetros a las rutas)
(Qué es routing)
Línea 13: Línea 13:
 
*Ahora no vamos a funcionar exactamente así en la parte del servidor
 
*Ahora no vamos a funcionar exactamente así en la parte del servidor
 
*Meditante el routing, vamos a  especificar el contenido que se va a servir ante una determinada URL
 
*Meditante el routing, vamos a  especificar el contenido que se va a servir ante una determinada URL
*Esto se hará en un único fichero '''''./app/route.php''''' de modo que todo lo realcionado con las rutas.
+
*Esto se hará en un único fichero donde se especifican las rutas '''''route.php''''' de modo que todo lo relacionado con las rutas esté ahí especificado
En él puede estar directamente el contenido que se va a servir ante una ruta o solicitud o se especificará un fichero donde se obtendrá dicho contendido <!--MRM Verificar -->
+
'''''/app/Http/route.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.
 
*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
 
*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

Revisión de 23:31 7 may 2015

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

  • 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
  • El cliente escribe una url solicitando una página web o php p.e.
http://localhost/paginaPrincipal.php
  • Ahora el servidor web procesa la petición ejecutando el fichero php y retornando una página web al cliente. Entendemos que existe un fichero en el servidor con el nombre paginaPrincipal.php
  • Ahora no vamos a funcionar exactamente así en la parte del servidor
  • Meditante el routing, vamos a especificar el contenido que se va a servir ante una determinada URL
  • Esto se hará en un único fichero donde se especifican las rutas route.php de modo que todo lo relacionado con las rutas esté ahí especificado
/app/Http/route.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 route.php, como vamos a ver a continuación

Especificando la ruta en Laravel

  • Para ello se usa la clase Route
  • 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/routes.php
Route::get();
Route::post();
Route::put();
Route::delete();
Route::any(); //any, sirve para especificar cualquier tipo de solicitud http
?>
  • 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, según veremos a continuación:

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

200px



Icon summary.gif

Resumen

  • Las rutas se especifican en el fichero ./app/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 ... ...)
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]+');