En esta segunda parte de tutoriales de Laravel, quiero que utilicemos los conocimientos aprendidos en la primera parte, con los cuales aprenderemos a crear nuestro primer módulo de Laravel, además les explicaré cómo validar datos, crear formularios, entre otros temas.
Vamos a hacer un módulo de usuarios, no es lo más emocionante del mundo, sí, pero casi siempre necesitaremos uno en nuestra aplicación. Vamos a ir muy paso a paso, lo primero que vamos a hacer es:
Crear las rutas y el controlador
Laravel dispone de algo llamado “Resource Controller” (traducido sería algo como “Controlador de recursos”)
Un Resource Controller sirve para crear una interfaz RESTful para un módulo.
Como este tutorial es más práctico que teórico, sólo les diré que este recurso RESTful permite definir todas las acciones para que el módulo pueda: Crear, Obtener, Actualizar y Borrar (lo que se conoce como CRUD por las siglas en ingles: Create, Red, Update, Delete)
Vamos a crear entonces todo lo que necesitamos del controlador y las rutas en 2 pasos:
Código :
Route::resource('admin/users', 'Admin_UsersController');
Esto es lo único que hace falta para vincular el “Resource Controller” a nuestras rutas.
- El primer parámetro es la dirección desde donde comenzará a funcionar nuestro recurso, en este caso admin/users
- El segundo parámetro es el controlador al que apunta.
Generando nuestro controlador
Laravel nos pone a disposición un sencillo comando para generar un controlador de recursos.
Abran el terminal o consola de comandos, vayan a la carpeta del proyecto (ejemplo: C:\xamp\httpdocs\pruebalaravel\) y tipeen:
Código :
php artisan controller:make Admin_UsersController
Esto generará un nuevo controlador con los métodos necesarios para nuestro módulo.
Vayan a app/controllers y verán un nuevo archivo llamado Admin_UsersController.php
Un último paso importante: Creen una carpeta llamada admin/ dentro de app/controllers, renombren el archivo a UsersController.php y colóquenlo dentro de la carpeta admin/ de modo que quede así:
Código :
app/controllers/admin/UsersController.php
Esto es importante para mantener la organización de nuestros módulos, que presumo, serían editados en un panel de administración (“admin”) y para que la ruta admin/users que escribimos antes, funcione. Ahora si abrimos el archivo controllers/admin/UsersController.php veremos lo siguiente:
Código :
<?php class Admin_UsersController extends \BaseController { /** * Display a listing of the resource. * * @return Response */ public function index() { // } /** * Show the form for creating a new resource. * * @return Response */ public function create() { // } /** * Store a newly created resource in storage. * * @return Response */ public function store() { // } /** * Display the specified resource. * * @param int $id * @return Response */ public function show($id) { // } /** * Show the form for editing the specified resource. * * @param int $id * @return Response */ public function edit($id) { // } /** * Update the specified resource in storage. * * @param int $id * @return Response */ public function update($id) { // } /** * Remove the specified resource from storage. * * @param int $id * @return Response */ public function destroy($id) { // } }
Como ven tenemos ya definidos todos los métodos para nuestro CRUD, aunque por los momentos no hacen nada (si acceden en el navegador a /admin/users verán una pantalla en blanco). Sin embargo, podemos revisar que los métodos funcionan si retornamos un string en algunos de ellos, ademas veamos las rutas a las que están asignados:
A index se accede mediante /admin/users:
Código :
public function index() { return 'Esta es la lista de usuarios'; }
A create se accede mediante /admin/users/create
Código :
public function create() { return 'Aqui va el form para crear un usuario'; }
A show se accede mediante la URL del recurso + el ID numérico de algún registro, en este caso no tenemos ninguno, pero para probar podemos colocar cualquier número, por ejemplo: admin/users/5:
Código :
public function show($id) { return 'Aqui mostramos la info del usuario: ' . $id; }
Así mismo, a edit se accede mediante la URL del recurso + un ID numérico + el segmento ‘/edit’: por darles un ejemplo: admin/users/10/edit
Código :
public function edit($id) { return 'Aqui editamos el usuario: ' . $id; }
Como ya lo habrán notado, el número que colquen en la URL se pasa por parámetro a algunos de los métodos, en este caso show y edit, este número debería ser el ID de usuarios existentes en la base de datos, esto lo veremos en las partes siguientes.
También les comento que: index, create, show y edit son métodos GET. ¿Recuerdan el tutorial sobre los [url=primeros pasos con Laravel[/url]? Cuando tipeamos:
Código :
/admin/users/5 en el navegador, estamos diciendole al servidor: GET (Obten) /admin/users/5
Para acceder a los métodos restantes store, update y destroy necesitamos otros verbos / métodos: POST, PUT, DELETE. Para ello necesitaremos crear vistas y formularios que, comúnmente, son los que generan ese tipo de peticiones, así que esa será la siguiente parte que publicaremos en un par de días.
Stay tuned.
¿Sabes SQL? ¿No-SQL? Aprende MySQL, PostgreSQL, MongoDB, Redis y más con el Curso Profesional de Bases de Datos que empieza el martes, en vivo.
Por Matias el 08 de Octubre de 2013
Saludos!
Matias-blog :
Saludos!
Sólo para la versión 4, saludos!
Por Hectorsito20 el 11 de Octubre de 2013
(Class Admin_UsersController does not exist)
epileftro85 :
(Class Admin_UsersController does not exist)
El controlador tiene que tener la siguiente ruta:
Código :
La clase debe llamarse:
Código :
Y la ruta debe ser:
Código :
Composer y Laravel deben hacer el autoload de Admin_UsersControllers interpretando los espacios separados por underscore _ como si fueran carpetas.
Intenta de nuevo y si eso no funciona, prueba lo siguiente:
Revisa que en app/start/global.php tenga lo siguiente:
Código :
Revisa que esté, como en mi archivo, la carpeta controllers/ dentro de la lista.
También prueba ejecutando este comando en la consola:
Código :
Para forzar que Composer genere el autoload de tus controllers y las demás clases.
Intenta eso y me avisas por favor.
Saludos.
Hectorsito20-blog :
Aquí he estado un poco indeciso, me gusta un poco más que la gente vaya leyendo e indagando tutorial tras tutorial y tratando, así sea copiando y pegando, de hacer las cosas por su cuenta.
Me gustaría saber qué opinan todos en general, o si algún lector (tú mismo, podría ser) quieres registrarte en cristalab y subir los ejemplos terminados y yo les doy el visto bueno
pero ahora el problema es que no me retorna nada :/ pero bueno ese si empezaré a investigar... nuevamente muchas gracias
Por Miguel Ángel Torres el 06 de Noviembre de 2013
Pues eso, muchas gracias de nuevo.
Por Miguel Angel Torres el 14 de Noviembre de 2013
Soy bastante novato en esto del desarrollo web y ahora que estoy estructurando un nuevo proyecto me surge una duda.
¿ Sería conveniente crear otro módulo "user" en otro directorio distinto de "admin" para gestionar el resto de peticiones que no estuvieran relacionadas con la administración de la web ?
Sería genial que creras un tutorial de posibles formas de estructurar webs usando laravel.
Muchas gracias Duilio y un saludo !!!
Por Miguel Angel Torres el 14 de Noviembre de 2013
Cuando te comentaba lo de "diferentes formas de estructurar webs" me refería a cómo se podrían organizar diferentes estructuras webs usando los controladores y módulos de laravel.
Saludos !!!
Por fede0914 el 15 de Noviembre de 2013
Por Carlos el 28 de Noviembre de 2013
Por Jose Pérez el 10 de Diciembre de 2013
Pero tengo un problemita, por más que reviso y reviso que todo esté correcto me sigue dando error 404:
The requested URL /laravel/laravel/public/admin/users was not found on this server.
laravel son dos carpetas seguidas porque lancé composer ya dentro de una carpeta laravel.
Si alguien me puede ayudar, se lo agradecería no he podido seguir por esto
PD: el archivo UsersController se le puede llegar desde la siguiente ruta: http://localhost/laravel/laravel/app/controllers/admin/UsersController.php
Claro no es la idea.
Por José Pérez el 10 de Diciembre de 2013
$ sudo a2enmod rewrite
$ sudo service apache2 restart
Disculpen no haber revisado ese detalle antes.
@jr_perezz
Por Luis el 28 de Diciembre de 2013
Para solucionarlo, cambié Admin_UsersController por el mismo nombre que la carpeta "admin". Creo que es caseSensitive en algunos casos
En vez de tener tanto en ruta como nombre de clase Admin con mayúscula, cambié ambos a minúscula.
Por Sergio Márquez el 15 de Enero de 2014
Por ejemplo:
Route::get('users/asdf/{name?}/', function ($name = NULL) {
if ($name) {
return "Hello ".$name;
} else {
return "Hello desconocido";
}
});
Al escribir:
http://localhost:8000/users/asdf/sdadfsf
Me funciona me dice hello sdadfsf, sin embargo al escribir http://localhost:8000/users/asdf/ al no enviar el parámetro no me retorna nada sólo una página en blanco, si me puedes ayudar por favor, gracias.
Por Mazatleco el 25 de Enero de 2014
Dejo el dato por si alguien se topa con lo mismo.
Por Mazatleco el 25 de Enero de 2014
Por Leandro el 23 de Abril de 2014
- Cuando se pone 'admin/users' se esta dando la ruta del archivo, lo que entiendo es que en laravel cuando busca UsersController la palabra Controller como si lo omitiera?
- He programado en codeigniter y ahi el nombre del archivo tenia que tener el mismo nombre de la clase, en laravel estos pueden ser distintos?
saludos.
Por marcosgue el 25 de Mayo de 2014
Ahora bien he hecho todos los pasos pero cuando ingreso a localhost:8888/pruebalaravel/admin/users, o cualquier otra de las rutas recibo el error 404 y el siguiente mensaje.
The requested URL /pruebalaravel/admin/users/ was not found on this server.
Por el 23 de Julio de 2014
Por vanessa el 23 de Julio de 2014
Por Raul el 05 de Agosto de 2014
la ruta donde debe ir que no la veo en mis códigos.
Por el 05 de Agosto de 2014
Si donde va eso porque aparece error al ejecutar /admin/users
Por emoll el 19 de Noviembre de 2014
Por cdiazr el 03 de Diciembre de 2014
Por Alonso miranda el 28 de Febrero de 2015
Por erozas el 08 de Marzo de 2015
Por GeraldinoF el 18 de Abril de 2015
espero su ayuda. Gracias