Lab - Laravel5 Completo - Master
Lab - Laravel5 Completo - Master
Lab - Laravel5 Completo - Master
LABORATORIO N°
Laravel
Alumno(s) Nota
Grupo
Ciclo
Fecha de entrega
I.- OBJETIVOS:
Instalar las dependencias en Laravel.
Instalar Composer.
Configuración general del IDE de desarrollo para Laravel.
II.- SEGURIDAD:
Advertencia:
En este laboratorio está prohibida la manipulación del hardware,
conexiones eléctricas o de red; así como la ingestión de alimentos o
bebidas.
VII.- PROCEDIMIENTO:
Nota:
Las secciones en cursivas son demostrativas, pero sirven para que usted pueda instalar las herramientas de desarrollo en
un equipo externo.
INSTALACIÓN DE COMPOSER
Diríjase a la página: http://getcomposer.org y descargue la versión más reciente para Windows.
Nro. DD-106
Desarrollo de Aplicaciones Empresariales – Laravel Página 2 de 77
La instalación se hará de manera automática, sin embargo, una manera de comprobar que fue realizada correctamente es
abriendo la ventana de comandos y escribiendo “Composer”, debería mostrarse una serie de comandos disponibles con este
gestor de librerías.
Ahora dirijámonos a Google y busquemos:” Sublime text package control” e ingresemos a la página en el link de Installation.
Abrimos Sublime Text, luego en el menú View -> Show Console, y pegamos el código que acabamos de copiar.
Nro. DD-106
Desarrollo de Aplicaciones Empresariales – Laravel Página 4 de 77
Al finalizar la instalación de dependencias, obtendremos un mensaje para reiniciar Sublime Text 3 Clic en aceptar.
Se abrirá una nueva ventana instaladora de dependencias, escriba: “sublimecodeintel” y elija la primera opción:
Nro. DD-106
Desarrollo de Aplicaciones Empresariales – Laravel Página 5 de 77
Una vez terminada la instalación aparecerá una ventana con algunos comandos disponibles en la nueva extensión.
Repetir el paso para ingresar al install package y ahora instalemos la extensión: advancedNewFile
Nro. DD-106
Desarrollo de Aplicaciones Empresariales – Laravel Página 6 de 77
Repetir el paso para ingresar al install package y ahora instalemos la extensión: Emmet
Hasta ahora, hemos instalado todo lo necesario para empezar a desarrollar nuestro proyecto.
CREANDO UN PROYECTO CON LA ESTRUCTURA LARAVEL
Para crear un nuevo proyecto abra la ventana de comandos con ruta en el directorio de proyectos de wamp server o de xamp
en caso lo tengan instalado.
Y escriban el siguiente comando:
Para verificar que se haya creado correctamente, podemos ver el directorio creado en la carpeta de proyectos del servidor.
3. Probemos el link creado en nuestro browser, debería abrirse la página de xamp o wamp.
Sin embargo, la página a la que hemos sido re-direccionados, es la página principal de xamp o wamp,
4. Vamos modificar el archivo:
a. En WAMPSERVER: C:\wamp64\bin\apache\apache2.4.17\conf\extra\httpd-vhosts.conf
b. En XAMP: C:\xamp\apache\conf\extra\httpd-vhosts.conf
DEFINIENDO EL PROYECTO
El proyecto que crearemos en este curso será un gestor de imágenes y álbumes que un usuario registrado podrá realizar.
Algunos casos de Uso:
El usuario podrá crear, modificar y eliminar fotografías.
El usuario podrá crear, modificar y eliminar álbumes.
Un álbum tiene varias fotografías.
Una fotografía pertenece a un solo álbum.
Un usuario tiene varios álbumes.
La fotografía tiene un identificador, nombre, descripción, una ruta en el servidor, y el álbum al que pertenece.
El álbum tiene un identificador, nombre, descripción y el usuario al que pertenece.
El usuario tiene un identificador, nombre, email y password.
o Email y password: Estos campos, laravel los considera por defecto, es decir que tiene una programación
ya dada incluso para enviar un correo y confirmar a un usuario.
8. Repita los pasos 6 y 7, solo que ahora para crear el modelo a la entidad Foto.php. El código debería quedar de la
siguiente manera:
A este punto, tenemos listos los modelos. Posteriormente realizaremos la migración a la base de datos.
EJERCICIO:
Modifique el modelo USUARIO para que ahora, adicionalmente tenga 2 campos “pregunta” “respuesta”, estos
campos servirán para una posible recuperación de contraseña del mismo.
Si usamos la combinación de teclas Alt + clic Sobre “AuthenticatesAndRegistersUsers”, iremos a la definición del Trait.
Nro. DD-106
Desarrollo de Aplicaciones Empresariales – Laravel Página 13 de 77
EJERCICIO
Investigue y averigüe: ¿Cuál es la utilidad, características y funcionalidad de un TRAIT en PHP?
8. Lo que tiene la definición del Trait es la obtención del registro de un usuario, login del mismo, etc., Aunque todas las
funciones ya están declaradas en inglés, algunas no son lo suficientemente óptimas y adecuadas para la aplicación
que deseamos desarrollar. Entonces lo que haremos será crear una copia del código del trait, de modo que irá
incluido en el controlador de validación y obviaremos la sentencia “USE”, para omitir el uso del archivo.
9. Copie el código de la declaración del Trait y péguelo en el controlador de validación, (Todo el código copiado irá
en vez del “use” que se encuentra en la fila 21).
10. Para ordenar el código, ubique el constructor del controlador y muévalo inmediatamente después de la
declaración de la variable protegida $registrar.
El resultado debería tener cierta similitud respecto de la imagen a continuación.
Nro. DD-106
Desarrollo de Aplicaciones Empresariales – Laravel Página 14 de 77
26. Abra el archivo WelcomeController.php. //Esta es una página que se les muestra a los invitados, vale decir a los
que aún no han iniciado sesión.
27. Modifique el nombre del archivo por: “BienvenidaController.php”
28. Así mismo, modifique el nombre de la clase “WelcomeController” por “BienvenidaController”
29. Ubique la función Index, modifique el nombre de la función por “getIndex”. Modifique su valor de retorno por el
texto: “bienvenida a la aplicación”.
CREANDO CONTROLADORES
Nro. DD-106
Desarrollo de Aplicaciones Empresariales – Laravel Página 16 de 77
12. Cree el código necesario para el controlador del usuario, de modo que, solo pueda ver y editar su perfil. El código
debería quedar de la siguiente manera:
Nro. DD-106
Desarrollo de Aplicaciones Empresariales – Laravel Página 18 de 77
El método que acabamos de crear sirve para que lanzar el error 404 (notFound), en caso de que el usuario coloque
una ruta (ACTION) que inexistente.
14. Copie y pegue la misma función en los controladores de: Validación, Foto, Usuario e Inicio.
http://gestorlaravel.com
4. En este caso se hace referencia a la ruta: “/”, ya que la carpeta, el controlador que responde es
BienvenidaController, y el action por defecto a ejecutarse es: getIndex, ya que la página está siendo cargada por
primera vez.
Ilustración 1omita el link que observa en esta imagen, el link arriba de la misma, es el correcto
9. El texto que debería mostrarse es lo que tenemos en la función INDEX del controlador InicioController, es decir el
texto: “página de inicio validado”.
Nro. DD-106
Desarrollo de Aplicaciones Empresariales – Laravel Página 20 de 77
Como se observa la redirección se hizo de manera automática al action “getInicio” del controlador validación. Esto
se debe a que el usuario no está “logeado” correctamente y siempre se le mostrará el formulario de inicio de sesión
en caso de que la función handle del Middleware Authenticate no lo valide como tal.
Ilustración 2omita el link que observa en esta imagen, el link arriba de la misma, es el correcto
El resultado debería ser acceder al controlador validación en su action fotos. Sin embargo y de manera análoga al
caso anterior, la redirección se hizo automáticamente a la página del formulario para iniciar sesión, y esto sucederá
hasta que le usuario se encuentre validado.
Para omitir el control de validación de usuario (para temas de desarrollo) haremos lo siguiente:
De esta manera estamos diciendo que, sin importan que el usuario se encuentre “logeado”, se acceda a la
petición recibida en los parámetros recibidos.
http://gestorlaravel.com /validado/fotos
Ahora intente ingresar a la siguiente URL (probaremos otro action del controlador de Foto):
http://gestorlaravel.com/validado/fotos/crear-foto
En efecto se produce una excepción, sin embargo, no es un error 404 (not found page), que es lo que
tenemos en el controlador de foto en su función missingMethod.
1. Ubique el archivo app.blade.php y modifíquelo en las siguientes líneas (cambio de idioma unicamente)
2. Ahora modifique las siguientes líneas para modificar los controladores, el archivo debería quedar de la siguiente
manera:
6. En la línea 51, modifique la palabra “Login” por “Iniciar Sesión”, líneas abajo modifique el texto “Forgot your
password” por “Olvidé mi contraseña”.
7. Modifique el texto de error por “Al parecer algo está mal”.
8. Modifique también el link de olvidar contraseña al action “validacion/recuperar”.
http://gestorlaravel.com/validacion/inicio
De la misma manera intente entrar al link registrarse, el resultado debería ser el siguiente:
3. Abra el controlador de “Validacion”, busque la acción getRecuperar() y modifique su valor de retorno por:
Nro. DD-106
Desarrollo de Aplicaciones Empresariales – Laravel Página 27 de 77
Para migrar con éxito nuestros modelos a la base de datos, primero debemos crear archivos de migración.
1. Ingrese a la ventada de comandos con ruta en el directorio de nuestro proyecto.
Ciertamente la tabla usuarios debe ser creada y está contemplada por Laravel, sin embargo, los campos no son
los mismos del todo.
1. Abra el archivo “create_users_table.php”, modifíquelo de modo tal que quede como en la imagen mostrada.
Nro. DD-106
Desarrollo de Aplicaciones Empresariales – Laravel Página 28 de 77
3. De manera análoga modifique el archivo “CrearTablaFotos” y modifíquelo para que quede de la siguiente manera:
7. Verifique mediante phpmyadmin, que las tablas se hayan creado correctamente en la base de datos.
Nro. DD-106
Desarrollo de Aplicaciones Empresariales – Laravel Página 29 de 77
CREANDO SEEDERS
Es importante el
orden de creación
de los Seeders,
primero van las
tablas menos
dependientes de
otras.
3. A continuación, haga 3 copias del archivo DatabaseSeeder con los nombres UsuariosSeeder, FotosSeeder y
AlbumesSeeder.
4. Modifique el archivo UsuariosSeeder para que quede de la siguiente manera:
Nro. DD-106
Desarrollo de Aplicaciones Empresariales – Laravel Página 30 de 77
EXPLICACIÓN:
1. Creamos un ciclo for para crear 50 usuarios al azar en la base de datos. No consideramos su ID porque es
autogenerado.
2. La función bcrypt(),sirve para encriptar el parámetro entregado
7. PASO RECOMENDADO: Es recomendable ejecutar el siguiente comando antes del punto Nro. 8
composer dumpautoload -> Este comando sirve para refrescar o actualizar un archivo en el que figuran los
seeders, sus nombres y demás características; Y ya que hemos creado nuevos seeds, es recomendable hacer uso
del comando en mención.
___________________________________________________________________________________
___________________________________________________________________________________
___________________________________________________________________________________
Aclaración: Se ha puesto un mensaje de exceso de tiempo sin actividad en el tipo de error Token… por que el
token de un formulario cambia si pasa mucho tiempo.
1. Vamos a probar que el error general (para que se renderice cuando estamos en modo debug), vamos a
ocasionar un error de cualquier tipo en modo debug.
Ahora generaremos el mismo error, solo que antes cambiaremos en el archivo .env, el modo debug false. Lo
que debería suceder es que no se haga un debug del error y se re-direccione a la página a la página de inicio.
Nro. DD-106
Desarrollo de Aplicaciones Empresariales – Laravel Página 33 de 77
NOTA: Como podemos observar, estamos analizando que cuando un error de tipo Token… se dé, la función render que
captura ese error renderiza la misma URL pero en la sesión crea un variable de nombre “csrf”, esta variable contiene un
mensaje que será mostrado justo en el body de la página de lanzarse el error.
b. Ahora solo queda probar el formulario, pero eliminando el token con la función “inspeccionar
elemento” de nuestro navegador, y hacer submit.
b. La otra forma sería cuando el usuario sí esté validado, entonces el error se generaría en inicio, no en
bienvenida. Modifique la vista inicio.blade.php, para que quede de la siguiente manera:
Por último, para probar el error intentemos iniciar sesión con credenciales falsas, el resultado debería ser el
siguiente:
En ambos casos tendremos un error similar, claro que como no tenemos una credencial aún creada, no podemos probar el
error cuando el usuario está loggeado.
*** Para finalizar la sección, cambie el archivo .env a true el modo de debug, para identificar fácilmente los errores.
Nro. DD-106
Desarrollo de Aplicaciones Empresariales – Laravel Página 35 de 77
1. Identifiquemos el error que se produce al momento tratar de iniciar sesión con una cuenta errónea.
Este error se debe a que no lo estamos importando, por ende, no estamos haciendo uso de ella.
La función getSalida() se ejecutará cuando el usuario desee cerrar sesión, y la redirección se hará hacia “ ’/’ ”, sin embargo
si observamos el constructor de esta clase:
Tenemos la ejecución del Middleware “guest”, Como se vio en teoría, este Middleware se encarga de ver si es que existe un
usuario de tipo digamos invitado, se tomarán acciones especificadas en su función, sin embargo se hace excepción al
momento de ejecutar una función “getLogout”, debemos cambiar esta función por “getSalida”. Realice el cambio para que
quede de la siguiente manera:
Con este cambio ya podremos iniciar y cerrar sesión de una mejor manera.
Para registrar a un usuario el constructor hace uso de una variable de tipo de dato Registrar con el nombre $registrar.
En este archivo, la función validator(), se encarga de verificar que, al momento del registro de un usuario, se reciban los
campos correspondientes y de hecho, cumplan con ciertas características, sin embargo, los campos se han modificado.
5. Modifique el archivo para que, los campos del registro coincidan, de la siguiente manera:
Como podemos observar en la función(ACTION) postRegistro, se hace uso de la función validator() con la finalidad de
validar los campos al momento de registrar a un usuario, sin embargo luego se hace uso del ciclo IF, en caso de que los
campos no hayan sido validados correctamente.
Nro. DD-106
Desarrollo de Aplicaciones Empresariales – Laravel Página 38 de 77
Si no se entra al ciclo IF, la siguiente función a utilizar será create(); función encargada de crear el registro para el usuario
en el archivo Registrar.php; Sin embargo este archivo no se encuentra correctamente modificado ya que los campos del
usuario han cambiado.
Sin más modificaciones pruebe que puede ingresar al sistema con una cuenta real. El resultado debería ser el inicio de
sesión exitoso.
__________________________________________________________________________________________________
Para darle un poco más de estilo, vamos a modificar la palabra usuario por el nombre del usuario que está ingresando al
sistema.
9. Actualice la página y observe los cambios. El elemento Auth, es quien tiene las credenciales del usuario registrado.
Resultado:
Hasta ahora, hemos terminado de corregir el request que envía la sección de REGISTRO (en resumen, una serie de reglas
para validar los campos de registro, etc.), de manera análoga, trabajaremos con el inicio de sesión.
1. Abra el archivo ValidacionController y ubique el action postInicio (action con método post para el inicio de sesión).
Como se puede observar, en este caso la función validate, está creada dentro del action, por el tema de INYECCIÓN DE
DEPENDENCIA, debería estar en un archivo distinto (análogo a postRegistro() con el archivo Request en la carpeta
http/requests).
5. En el action postInicio de nuestro controlador de Validación, modifique el tipo de dato que se recibe como
parámetro, la idea es que ahora recibamos un tipo request => IniciarSesionRequest().
6. Adicionalmente, en el mismo archivo (ValidacionController.php), haga un “use” del archivo request que acabamos
de crear.
___________________________________________________________________________________________________
2. En el nuevo archivo creado (RecuperarContrasenaRequest.php), haremos una pequeña copia del Request para
Iniciar Sesión en su sección de reglas.
3. Copie parte del código (reglas), del request Iniciar sesión para que ahora el Request de Recuperar Contraseña que
de la siguiente manera:
Nro. DD-106
Desarrollo de Aplicaciones Empresariales – Laravel Página 42 de 77
Al usar las reglas de este Request, estamos indicando que el campo email será requerido, y que además exista en la tabla
“usuarios” en su columna email. Por otro lado, que el password sea requerido y tenga como mínimo 6 caracteres.
5. Ya que vamos a usar el nuevo Request en nuestro controlador de Validación, importe o haga referencia al archivo
con un “use”. Además usaremos el modelo de usuario, de modo que también incluiremos la referencia al mismo:
EXPLICACIÓN:
Ya que postRecuperar(), es una función que se ejecutará mediante el verbo POST, éste action servirá para guardar los
cambios en caso de querer modificar una contraseña.
Si observamos detenidamente, lo primero que debería hacer esta función, es corroborar que todos los campos en el
registro de Recuperar Contraseña, hayan sido llenados correctamente. Sin embargo, quien está encargado de hacer ese
trabajo es el Request que hemos creado en su función rules; Aquí ya no nos preocupamos por eso. Este mecanismo se hace
llamar INYECCIÓN DE DEPENDENCIA =).
Entonces, como tenemos claro que todos los campos están ya debidamente verificados, primero creamos variables que
serán recuperadas a través de la variable request.
En la línea 168: creamos un objeto del modelo USUARIO con una consulta ELOQUENT donde se especifica que el usuario
buscado será el que en su campo EMAIL tenga el email que hemos recibido del Request. La función first(), indica que se
obtendrá un único registro con ese email (Aunque está claro que los correos deberían ser únicos.). [LA FUNCIÓN FIND DE
ELOQUENT, ES SIMILAR.].
Nro. DD-106
Desarrollo de Aplicaciones Empresariales – Laravel Página 43 de 77
En la línea 170: La estructura condicional será usada con la finalidad de verificar que la pregunta ingresada sea igual a la
pregunta del usuario recuperado de la base de datos no solo en valor sino también en tipo (===); lo mismo sucede con la
respuesta.
En caso de que la estructura condicional mencionada en el párrafo anterior, esté correcta; Del Request recuperamos la
nueva contraseña ingresada por el usuario. Luego al objeto $usuario, asignamos el valor de su nueva contraseña(haciendo
uso de la función bcrypt para que la guarde encriptada y no como tal.).
Antes de terminar se hace uso de la función SAVE en usuario para que sus cambios sean guardados.
Finalmente se hace una redirección al action INICIO del controlador VALIDACION para que se muestre la vista del inicio de
sesión; Además enviamos un array asociativo con la variable RECUPERADA con el contenido: LA CONTRASEÑA SE CAM….
En caso de haber fallado el proceso de actualizar la contraseña del usuario, se hará una redirección al action RECUPERAR
del action VALIDACIÓN, Es decir a la misma vista de donde intentó cambiar la contraseña. WithInput nos indica que cuando
la página sea recargada, los inputs de email y pregunta, deberían escribirse de manera automática. WithErrors, envía un
array asociativo con la variable pregunta y el contenido: La pregunta y/o respu….
Probando el código:
1. Intente recuperar la contraseña con un correo válido, dos contraseñas correctas (con más de 5 caracteres), pero
con pregunta y/o respuesta equivocada. Anote los resultados
___________________________________________________________________________________________
___________________________________________________________________________________________
2. Intente recuperar la contraseña con todos los datos correctos. ¿Qué sucede?
___________________________________________________________________________________________
___________________________________________________________________________________________
Como ha notado, cuando comentemos cualquier tipo de error en el formulario de recuperación de contraseña, los errores
son impresos en la pantalla debido al código que tenemos en la vista recuperar:
Sin embargo, cuando hacemos todo correctamente (es decir colocamos los campos como debieron ser y en efecto se
cambia la contraseña), no obtenemos el mensaje personalizado que pusimos de contenido: “La contraseña se cambió….”.
Esto se debe a que en la vista de inicio no se ha considerado poner este tipo de mensajes.
8. Intente recuperar una contraseña nuevamente, con todos los datos correctos y valide que los resultados son
parecidos a la imagen a continuación:
Ahora procederemos a crear la funcionalidad para actualizar los campos del usuario, es decir, darle el derecho de actualizar
el perfil.
5. Abra el archivo de la vista principal “app.blade.php”, y agregue la siguiente línea para darle opción de editar al
usuario en caso de que éste se encuentre loggeado.
7. Ahora ingrese al sistema, y escoja la opción actualizar perfil, el resultado debería ser parecido al siguiente:
Hasta ahora hemos implementado la funcionalidad del verbo GET al momento de querer actualizar el perfil de usuario, falta
la funcionalidad del verbo POST, lo haremos de la siguiente manera.
11. Referencie también a la clase Auth, ya que ésta contiene la información del usuario loggeado:
12. Ahora modifique el contenido de su función postEditarPerfil(), para que quede de la siguiente manera:
Hemos importado la librería Auth ya que ésta, contiene la información del usuario autenticado, de hecho la primera
variable viene a ser del tipo usuario.
Luego recuperamos el nombre del request, ya que es requerido (y de ese trabajo de validaciones se encarga nuestro
request).
El usuario puede o no cambiar el nombre, pero la única manera de comprobar o asegurarnos de que la información sea
procesada de manera correcta es asignándole el nuevo nombre que recibimos del request al atributo nombre del usuario
recibido (en un caso común, si el usuario no desea cambiar su nombre, lo dejará con el mismo valor y no tendremos
inconvenientes).
El primer if, es para ver si es que nuestro request tiene lleno el campo de password, ya que en caso de que así fuera,
asignemos el valor recibido, solo que encriptado al objeto usuario.
Nro. DD-106
Desarrollo de Aplicaciones Empresariales – Laravel Página 47 de 77
El segundo if, analiza si el request tiene lleno el campo de pregunta (no olvidemos que el request creado se encarga de
analizar que si hay pregunta, tiene que haber respuesta), y ambos valores son asignados al objeto usuario.
Finalmente se hace uso de la función save(), para actualizar al objeto usuario en la base de datos y la redirección se hará
validado que si observamos en nuestra hoja de rutas se traduce como InicioController.
Cuando se hace la redirección, se envía un mensaje de: Su perfil ha si….., encapsulado en la variable actualizado
Para recibir e imprimir eso en la vista correspondiente debemos hacer lo siguiente:
13. Abra la vista Inicio y agregue el código para imprimir el mensaje de cambios realizados correctamente.
14. Para comprobar, inicie sesión, actualice su perfil como convenga y el resultado debería ser el siguiente:
EJEMPLO:
Nro. DD-106
Desarrollo de Aplicaciones Empresariales – Laravel Página 48 de 77
En esta sección vamos a crear la funcionalidad que tiene el sistema de mostrar los álbumes que posee un usuario.
IMPORTANTE: Existen algunos pasos, como creación de requests, importación de librerías, etc., que por el avance del curso
se asume el participante domina, en tal sentido preste mucha atención a la hora de seguir los pasos del laboratorio.
Destacamos que $albumes es una colección de objetos de tipo álbum y que ahora se encuentran en la variable $albumes.
Además, se retorna este arreglo mediante un array asociativo con la variable álbumes a la vista mostrar dentro de una
carpeta álbumes (que aún no hemos creado).
4. Antes ubique la vista principal (app.blade.php), para agregar el link de ver los álbumes de un usuario.
5. Ahora, cree la vista correspondiente para usar la funcionalidad mencionada. Cree la carpeta albumes y dentro de
ella, la vista mostrar.blade.php. El código a crear será el siguiente:
Nro. DD-106
Desarrollo de Aplicaciones Empresariales – Laravel Página 49 de 77
Destacar que se usa la función sizeof para verificar que el arreglo que recibimos desde el controlador ($albumes) sea mayor
a 0.
Si es mayor a cero, recorremos el arreglo y en cada iteración imprimimos el nombre del álbum, la descripción y un botón
con dirección a fotos enviándole el ID del álbum.
En caso de que el arreglo esté vacío (lo que indica que el usuario tendría 0 álbumes), se imprimirá un mensaje para indicarle
al usuario de que no tiene álbumes.
6. Ingrese al sistema con un usuario que tenga álbumes, escoja la opción de ver los álbumes del usuario y corrobore
que la información resultado sea similar a la siguiente:
Nro. DD-106
Desarrollo de Aplicaciones Empresariales – Laravel Página 50 de 77
En las reglas solo se indica que necesariamente se tiene que recibir un campo id.
La función authorize dice:
Primero se obtiene el objeto de tipo usuario que se encuentra loggeado.
Luego creamos la variable $id para guardar el valor del id que ha venido a este request.
Creamos la variable $album, que será obtenida de los álbumes que posee el usuario pasándole como parámetro el id del
álbum que buscamos.
Si esta información es correcta y el álbum existe, se retornará true, en caso contrario, false.
5. Regresando al controlador de las fotos modifique su función getIndex para que quede de la siguiente manera:
Nro. DD-106
Desarrollo de Aplicaciones Empresariales – Laravel Página 51 de 77
OJO: Las imágenes no se ven porque aún no hemos creado la ruta que tiene cada imagen, aunque es un tema secundario.
1. Tratemos de quebrar la seguridad del sistema, en el link de un álbum para ver sus fotos click derecho e
inspeccionar elemento.
Nro. DD-106
Desarrollo de Aplicaciones Empresariales – Laravel Página 52 de 77
2. Ahora, modifique el valor del id que se le envía mediante url por un id diferente, por ejemplo 10(en este ejemplo
el id será 1 por que pertenece al álbum 1).
3. Ahora, enter y de clic al link del botón del álbum editado, El resultado debería ser como el siguiente.
Nro. DD-106
Desarrollo de Aplicaciones Empresariales – Laravel Página 53 de 77
1. Abra el controlador de los álbumes y ubique la función getCrearÁbum. Modifíquelo de la siguiente manera:
2. Ahora cree la vista de nombre: “crear-album.blade.php”. Y agregue el código para crear un álbum, puede ayudarse
copiando el código de actualización de perfil de usuario:
8. Para mejorar la vista luego de la creación de un álbum, inserte el código siguiente en la vista de Mostrar Álbum
Para crear una foto, ésta debe pertenecer a un álbum, de modo que incluso el método getCrearFoto(), debe recibir el id del
álbum al que va a pertenecer. Este id requerido debería ser enviado por la vista que tiene la lista de fotos que un álbum
contiene, es decir de la vista mostrar.blade.php (de la carpeta fotos - view).
Y para crear una nueva foto ésta vista mostrar.blade.php (de la carpeta fotos - view), debe enviar el id que recibió al
método postCrearFoto
Y recibimos el id del álbum al que la nueva foto pertenecerá. Ahora modificaremos la función getIndex del controlador de
fotos para que envíe la variable ID del álbum.
2. Modifique la función getIndex() del controlador de fotos para que quede de la siguiente manera:
Nro. DD-106
Desarrollo de Aplicaciones Empresariales – Laravel Página 56 de 77
Ahora en la vista de Mostrar todas las fotos de un álbum, en el link de Crear nueva Foto, enviaremos el $id del álbum al que
ésta foto va a pertenecer.
De esta manera, cuando creemos una nueva foto el id del álbum estará siendo enviado desde esta vista =).
La función authorize será la misma que utilizamos en MostrarFotoRequest, ya que lo que queremos comprobar es que ese
id de álbum le pertenece al usuario loggeado actualmente.
En las reglas destaca el campo imagen que es de tipo image y debe pesar como máximo 20Mb (aunque es mucho espacio
para una fotografía.). Además del campo id que es requerido y tiene que existir en la tabla álbumes en su columna id.
7. Puede apoyarse en el código de mostrar fotos para modificarlo y que finalmente quede de la siguiente manera:
8. Nuevamente modifique la función getCrearFoto del controlador de Fotos para que ahora no solo se retorne la
vista si no también el id del álbum al que pertenecerá la nueva foto.
En este caso usamos un Request genérico (de la clase Request), porque de éste solo necesitamos el id que recibiremos.
9. Ahora modifique el controlador de fotos en su action postCrearFoto para que quede de la siguiente manera:
Nro. DD-106
Desarrollo de Aplicaciones Empresariales – Laravel Página 58 de 77
Explicación:
Línea 39: Recuperamos el id del álbum al que pertenecerá la foto.
Línea 40: Recuperamos del Request tmb, solo que éste es un archivo (es la forma de recuperar arhivos).
Línea 41: La ruta se compondrá de:
Para hacer uso de la librería Carbon, no olvidarse de referenciarla en la cabecera del documento. Ésta librería sirve para
obtener fechas y horas actuales y es nativa de Laravel.
¿Por qué cifrar?, solo para que si dos personas ponen una foto con el mismo nombre en el mismo instante el nombre sería
el mismo, en este caso cuando aplicamos el cifrado sha1, el valor resultado nunca se repetirá.
Línea 42: La función getcwd(), obtiene el directorio actual de donde se está trabajando. En modo de producción estaríamos
hablando de la carpeta public de nuestro proyecto, acompañado de los nombres de carpetas de nuestro servidor.
Línea 43: Y la función move, sirve para copiar el archivo con el que estamos trabajando a una ruta en nuestro servidor.
Líneas 44 – 49: Creamos un registro en la tabla Foto con los datos mencionados.
Línea 52: retornamos nuevamente a la página de fotos, no olvidándonos de enviar el id del álbum por si queremos crear
otra foto. Además de una variable de sesión llamada creada con información de éxito al momento de guardar los cambios
realizados.
Es posible que en sus servidores XAMP o WAMP, no tengan habilitado el permiso en PHP, de dar el acceso u obtener la
información de los archivos que se manejen en las aplicaciones, ejm: la ruta de un archivo, la extensión, etc.
Y es probable también que, por este motivo, obtengan un error del siguiente tipo:
SOLUCIÓN:
3. Una vez quitado el comentario en la línea, guardan los cambios y proceden a reiniciar el servidor =).
10. Para finalizar la sección, solo queda probar subir fotos a nuestros álbumes.
Nro. DD-106
Desarrollo de Aplicaciones Empresariales – Laravel Página 60 de 77
WIN!
Nro. DD-106
Desarrollo de Aplicaciones Empresariales – Laravel Página 61 de 77
En este controlador estamos recibiendo por URL el parámetro $id, que va a ser el id del álbum que deseemos editar.
Seguidamente estamos retornando la vista correspondiente, pero le estamos pasando como parámetro el objeto álbum que
hemos recuperado a partir del id que hemos recibido por parámetro gracias a Eloquent!
3. Ahora cree la vista para editar un álbum de nombre: “actualizar-album.blade.php”, puede apoyarse en el código
del archivo, “actualizar” del directorio de usuario.
4. El código de la vista debería quedar de la siguiente manera:
Como observamos, estamos usando el objeto álbum que nos pasó la función get, para seguidamente ocultarla en el
formulario en la línea 21. ¿Para qué? Para que cuando hagamos submit, es decir una vez modificados los campos, enviemos
en el Request el valor del campo id, de modo que, pueda ser actualizado.
Nro. DD-106
Desarrollo de Aplicaciones Empresariales – Laravel Página 62 de 77
5. Diríjase a la vista de Mostrar Álbumes para añadir la funcionalidad de editar un álbum. Al código de esta vista,
debería añadírsele las siguientes líneas.
____________________________________________________________________________________________________
____________________________________________________________________________________________________
___________________________________________________________________________________________________
___________________________________________________________________________________________________
10. Como quiera que en el código que hemos reutilizado, está la definición de la clase Auth en el Request de
Actualizar. Referencia a esta clase en la cabecera del archivo.
11. Modifique las reglas de este Request con el siguiente orden e instrucción:
a. El campo “id” es requerido y tiene que existir en la tabla albumes en su columna id.
b. El campo “nombre” es requerido
c. El campo “descripcion” es requerido
12. Diríjase al controlador de álbum en su función (action) postActualizarAlbum y modifíquelo para que quede de la
siguiente manera:
Nro. DD-106
Desarrollo de Aplicaciones Empresariales – Laravel Página 63 de 77
____________________________________________________________________________________________________
____________________________________________________________________________________________________
13. En la vista de mostrar álbumes, incluya el código para que verifique la variable “actualizado” y muestre dicho
mensaje cuando un álbum es actualizado.
_____________________________________________________________________________________________________
_____________________________________________________________________________________________________
3. Cree una vista para Foto de nombre “actualizar-foto.blade.php”. Puede ayudarse copiando en código de mostrar.
Modifique dicha vista para que su código quede de la siguiente manera:
Destaca en este formulario que ahora, el ID de la foto que enviamos se hace a través de un input oculto, ya no por url.
Además, que el campo de la imagen, no es requerido, pues la persona podría o no actualizar la foto necesariamente.
Nro. DD-106
Desarrollo de Aplicaciones Empresariales – Laravel Página 64 de 77
4. Diríjase a la vista de mostrar fotos, para agregar el botón de editar foto, hágalo de la siguiente manera:
Ya tenemos la parte funcional de conseguir la página para editar la foto. Ahora falta la acción de enviarla y guardarla
Explique: ¿Qué estamos haciendo en las dos funciones principales de este Request?
____________________________________________________________________________________________________
____________________________________________________________________________________________________
10. Ahora modifique la función postActualizarFoto para que quede de la siguiente manera.
_____________________________________________________________________________________________________
_____________________________________________________________________________________________________
Ahora explique:
Desde la línea 69 (el bloque if), ¿por qué tiene que verificarse que la ruta exista?. Es necesario la verificación
____________________________________________________________________________________________________
____________________________________________________________________________________________________
11. Modifique la vista de Mostrar Fotos de modo que quede de la siguiente manera:
____________________________________________________________________________________________________
Nro. DD-106
Desarrollo de Aplicaciones Empresariales – Laravel Página 66 de 77
Pruebe el código para verificar que las fotos pueden ser editadas.
Vamos a trabajar con la última parte del CRUD, que viene a ser la eliminación.
_____________________________________________________________________________________________________
6. Ahora diríjase a la vista de mostrar álbumes, y agregue una porción de código para poner el botón eliminar el
álbum:
Nro. DD-106
Desarrollo de Aplicaciones Empresariales – Laravel Página 68 de 77
1. Por las mismas razones al igual que el controlador de los álbumes, en el controlador de las fotos, elimine la función
getEliminarFoto.
2. Cree un Request de nombre “EliminarFotoRequest”.
3. Referéncielo en el controlador de las fotos.
4. Modifique el request creado, para que quede de la siguiente manera:
Nro. DD-106
Desarrollo de Aplicaciones Empresariales – Laravel Página 69 de 77
___________________________________________________________________________________________________
___________________________________________________________________________________________________
Investigue:
___________________________________________________________________________________________________
___________________________________________________________________________________________________
Ahora para crear el botón para eliminar una foto en la vista de mostrar fotos:
MEJORANDO EL PROYECTO
En esta sección corregiremos y mejoraremos el proyecto en la parte visual y de usabilidad del sistema.
Pruebe el código de modo que, los álbumes, se ordenen en columnas de 3 y las fotos en 4 columnas como máximo.
Nro. DD-106
Desarrollo de Aplicaciones Empresariales – Laravel Página 72 de 77
Sucede también que, al momento de eliminar un álbum de la base de datos, éste elimina todos los registros en la tabla fotos
que pertenezcan al álbum en mención, lo cual es correcto. Sin embargo, hemos obviado la parte de eliminar las fotos como
archivos en el servidor.
5. Modifique el controlador de los álbumes en su action postEliminarAlbum, para que quede de la siguiente manera:
__________________________________________________________________________________________________
__________________________________________________________________________________________________
1. Para probar el funcionamiento correcto del sistema, nuevamente alimente la base de datos.
2. Abra la ventana de comandos con path en nuestro proyecto.
3. Escriba el comando: php artisan migrate:refresh –seed
Es probable que tengan un error del siguiente tipo: (Si no lo ha tenido, omita el paso)
5. Acceda con las credenciales creadas recientemente y pruebe la funcionalidad del programa.
No es seguro que tengan un resultado exactamente igual al mostrado, pero sí es seguro que se encuentran en la
versión será 5.0.XX (En caso de que la versión sea 5.1.xx, omita este laboratorio).
"require": {
"php": ">=5.5.9",
"laravel/framework": "5.1.*"
},
"require-dev": {
"fzaninotto/faker": "~1.4",
"mockery/mockery": "0.9.*",
"phpunit/phpunit": "~4.0",
"phpspec/phpspec": "~2.1"
},
1. Copie el fragmento de código dado.
2. En su proyecto ubique el archivo composer.json y modifíque lo siguiente:
Nro. DD-106
Desarrollo de Aplicaciones Empresariales – Laravel Página 74 de 77
3. Nuevamente ubíquese en la consola de comandos con ruta en nuestro proyecto y digite lo siguiente:
composer update
6. Ahora comprobaremos escribiendo el siguiente comando en cmd con ruta en nuestro proyecto.
composer dumpautoload
***IMPORTANTE
Uno de los cambios más importantes en la versión 5.1 es que se ha quitado la referencia a los archivos Guard y Registrar
Si recuerdan uno de los primeros cambios fue copiar parte del código del archivo Registrar para que en el controlador de
Validación desarrollemos algunas de sus funciones.
En Laravel 5.1 obviamos estas referencias. Ahora se encuentra en el contexto de Auth directamente.