Creando un ToDo con Laravel 4 – Rutas

Laravel4

Este post es la parte 4 de 4 del artículo: Creando un ToDo con Laravel 4

En esta entrada veremos como añadir las rutas necesarias para que nuestra aplicación funcione. Podemos ver más información en la documentación oficial sobre el enrutado.

En el fichero app/routes.php podemos ver la ruta que Laravel tiene creada por defecto para la raíz de nuestro dominio

tampoco voy a explicar nada nuevo que no podamos ver en la documentación así que expondré las dos formas que podremos usar en nuestro ToDo.

Una opción podría ser crear una ruta para cada petición que queramos hacer. Una para listar, una para mostrar, una para editar, crear, borrar…. tampoco es muy complicado pero puede resultar algo tedioso.

Otra forma es usar controladores de recursos que es la forma automática de crear una api RESTful sobre un recurso.

Si añadimos la siguiente línea en routes.php

Obtenemos las siguientes rutas:

el segundo parámetro será el controlador encargado de gestionar el funcionamiento.

Para crearlo automáticamente con todas las funciones necesarias desde consola escribimos:

php artisan controller:make ResourceController

Lo que nos añadirá un fichero en app/controllers llamado ResourceController con el esquema necesario para todas las rutas. Para más información mejor mirar la documentación oficial.

En nuestro caso vamos a necesitar dos controladores una para las categorías y otra para las tareas.

Para generar las rutas de la categoria es sencillo, como vimos antes.

Añadimos la siguiente línea a routes.php

y desde consola creamos el controlador

php artisan controller:make CategoriaController

Lo que nos generará el fichero CategoriaController en app/controllers con el siguiente contenido

 

Ahora la duda está en como queremos las rutas de nuestras tareas

todolaravel.dev/tarea/{tarea}

entonces haríamos lo que hemos hecho antes

o

todolaravel.dev/categoria/{categoria}/tarea/{categoria}

Cualquier opción es buena todo depende de como queremos actuar en ciertos casos.

Por hacerlo de las dos formas, cogeré esta última opción así por ejemplo, no podremos listar todas las tareas de golpe, en cambio si podremos hacer un listado de tareas filtrando por su categoría

Para ello añadimos en route.php

Y creamos el controlador como lo haríamos normalmente

php artisan controller:make TareaController

pero ojo! esta vez no nos vale con el controlador por defecto ya que nuestra tarea dependerá de una categoría así que deberemos editarlo para que cada método aparte de recibir la tarea reciba también el proyecto.

Antes de modificarlo vamos a ver una funcionalidad muy útil de la que dispone Laravel.

Ahora mismor según el código generado la función recibe parámetros del tipo interno que corresponde al id del recurso que vamos a usar, por lo tanto, lo que deberemos hacer por ejemplo en el caso de editar

en este caso buscamos la categoría con el id pasado como parámetro y en caso de existir dará error. (Ahora mismo este código no nos funcionaría porque no tenemos ningún modelo creado.. pero bueno. Habrá que creérselo :) )

Así que para no tener que andar buscando la categoría indicada en cada momento lo que haremos es que Laravel en vez de pasarnos el id como parámetro nos pase directamente nuestro objeto mediante Route::bind.

Con esto lo que haremos será obtener el objeto según el id que hayamos pasado por la ruta.

Podemos comprobarlo de una forma muy rápida. Primero crearemos los modelos que vamos a usar.

En app/models/ creamos dos ficheros:

Categoría.php

y Tarea.php

por ahora con este simple código nos vale, ya que como extiende de Eloquent tenemos los métodos básicos para usar

Así que vamos a comprobar lo anteriormente dicho, vamos a CategoriaController y modificamos el método show

Y si ahora vamos a nuestro navegador y ponemos:http://todolaravel.dev/categoria/1 nos mostrará la información de nuestra categoría

{“id”:”1″,”nombre”:”Categor\u00eda 1″,”slug”:”categoria-1″,”created_at”:”2014-07-03 15:42:39″,”updated_at”:”2014-07-03 15:42:39″}

Pero que ocurre si ponemos un ID que no existe? nos dará un error Argument 1 passed to CategoriaController::show() must be an instance of Categoria, none given, para evitar esto y que automáticamente nos lance un error 404  deberemos añadir las siguientes líneas a route.php

Y listo, ahora si volvemos a pedir un id que no exista nos lanzará una excepción NotFoundHttpException.

Ahora, ya solo nos queda una cosa, modificar nuestros controladores para que en vez de recibir ids reciban directamente el objeto que vamos a utilizar, por lo que nos quedarían así:

 

 

Con esto terminamos este capítulo sobre el enrutado. En el próximo empezaremos a dar un poco de funcionalidad al entorno.

 

Partes del artículo<< Creando un ToDo con Laravel 4 – Añadiendo datos de prueba

One Response to “Creando un ToDo con Laravel 4 – Rutas”

Deja un comentario

  • (will not be published)


+ 5 = 14