Anda di halaman 1dari 77

Desarrollo de Aplicaciones Empresariales

LABORATORIO N°

Laravel

CODIGO DEL CURSO:

Alumno(s) Nota

Carpio Lam José Carlos

Grupo
Ciclo
Fecha de entrega

DISEÑO DE SOFTWARE E INTEGRACIÓN DE SISTEMAS


PROGRAMA DE FORMACIÓN REGULAR
Nro. DD-106
Desarrollo de Aplicaciones Empresariales – Laravel Página 1 de 77

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.

III.- FUNDAMENTO TEÓRICO:


Revise sus diapositivas del tema antes del desarrollo del laboratorio.
IV.- NORMAS EMPLEADAS:
No aplica
V.- RECURSOS:
 En este laboratorio cada alumno trabará con un equipo con Windows 8.

VI.- METODOLOGÍA PARA EL DESARROLLO DE LA TAREA:


 El desarrollo del laboratorio es individual.

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.

INSTALACIÓN DE SUBLIME TEXT 3


Ir a la página principal de Sublime text y descargar la versión portable para Windows.
Nro. DD-106
Desarrollo de Aplicaciones Empresariales – Laravel Página 3 de 77

Descomprimir el contenido en una carpeta dentro de su ordenador

Ahora dirijámonos a Google y busquemos:” Sublime text package control” e ingresemos a la página en el link de Installation.

Copiar el texto que corresponde a Sublime text 3

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.

Cierre Sublime Text y vuelva a abrirlo.


Una vez abierto el programa presione la combinación de teclas Shift + p y escriba “Install Package” y elija la primera opción:

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

Espere mientras el proceso de instalación es realizado:

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

Repetir el paso para ingresar al install package y ahora instalemos la extensión:


SideBarEnhancements

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:

Composer create-project laravel/laravel=5.0 GestorImagenes


Crearemos un proyecto en la versión 5 de Laravel, ya que tiene algunos componentes a nivel de archivos necesarios que ya
no se encuentran en versiones posteriores (5.1 y 5.2).
Nuestro proyecto se llamará GestorImagenes

El proceso de creación iniciará.


Nro. DD-106
Desarrollo de Aplicaciones Empresariales – Laravel Página 7 de 77

Para verificar que se haya creado correctamente, podemos ver el directorio creado en la carpeta de proyectos del servidor.

De hecho, levantemos WampServer y ejecutemos la aplicación con el siguiente link:

CREANDO UN DOMINIO LOCAL


1. Ingresamos a C:\Windows\System32\drivers\etc y abrimos el archivo hosts con el block de notas.
Nro. DD-106
Desarrollo de Aplicaciones Empresariales – Laravel Página 8 de 77

2. Agregamos un nombre de dominio con resolución de nuestro localhost:

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

CREANDO LA BASE DE DATOS PARA EL PROYECTO


En esta sección vamos a crear la base de datos. Para ello deberíamos tener instalado MySql.
1. Ingresar a la página de PhpMyAdmin.
2. Crear una nueva base de datos de nombre: gestorimagenes.

3. Las tablas serán creadas de manera análoga a Symfony2.

CONFIGURANDO EL ENTORNO Y EL PROYECTO DE LARAVEL


1. Abra Sublime Text.
2. Elija la opción File->OpenFolder y abra la carpeta del proyecto creado con Composer.
3. Abra la ventana de comandos de Windows y ubíquese en la carpeta del proyecto.
4. Escriba “php artisan list”. Visualizará la lista de comandos disponibles que están disponibles en
artisan
5. Configurar el nombre de la aplicación:
a. Escriba “php artisan app:name GestorImagenes”.

b. Para corroborar el cambio abra el archivo


app/Http/Controllers/Auth/HomeController.php, Notará que el nuevo espacio de
nombres es el asignado.
Nro. DD-106
Desarrollo de Aplicaciones Empresariales – Laravel Página 9 de 77

6. Ubique el archivo “.env”.


a. Configure el código para que quede de la siguiente manera:

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.

CREANDO LOS MODELOS PARA EL PROYECTO


1. Ubique el archivo User.php que se encuentra dentro de la carpeta app.
Nro. DD-106
Desarrollo de Aplicaciones Empresariales – Laravel Página 10 de 77

2. Renombre el archivo por: Usuario.php.


3. En la línea 9, modifique el nombre de la clase por Usuario.
4. En la línea 18, modifique el nombre de la tabla por usuarios.
5. En la línea 25, modifique los campos que el usuario tendrá, para que quede de la siguiente manera:

Crearemos el siguiente modelo.


6. Cree un nuevo archivo de nombre Album.php en la carpeta en la que se encuentra Usuario.php.
7. Copie el código de usuario.php, y modifíquelo para que quede de la siguiente manera:
Nro. DD-106
Desarrollo de Aplicaciones Empresariales – Laravel Página 11 de 77

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:

DEFINIENDO RELACIONES DE CARDINALIDAD ENTRE MODELOS


1. Crearemos la relación de ÁLBUM -> FOTO: Un álbum tiene varias fotos.
2. Crearemos la relación de ÁLBUM -> USUARIO: Un álbum pertenece a un único usuario.
3. Modificamos el modelo álbum para que quede de la siguiente manera:

4. Crearemos la realción de FOTO -> ÁLBUM: Una foto pertenece a un álbum.


5. Modificaremos el modelo Foto para que quede de la siguiente manera:
Nro. DD-106
Desarrollo de Aplicaciones Empresariales – Laravel Página 12 de 77

6. Crearemos la relación USUARIO -> ALBUM: Un usuario posee varios álbumes.


7. Modificaremos el modelo Usuario para que quede 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.

CREANDO LOS CONTROLADORES


1. Ubique la carpeta app -> http -> controllers.
2. Dentro de ella encontrará una carpeta que agrupa a los controladores de la autenticación: Auth.
3. Renombre la carpeta “Auth” por “validacion”.
4. Dentro de la carpeta “validacion”, tendremos 2 archivos, elimine el archivo “Password”. Borraremos el archivo
porque nosotros haremos la recuperación de contraseña por medio de la pregunta y respuesta secreta.
5. En la carpeta “validacion”, queda un archivo “AuthController.php”. Renómbrelo a “ValidacionController.php”.
6. Este archivo se encargará de controlar funciones como inciar sesión, crear cuentas, validar al usuario que va a
iniciar sesión, etc.
7. Modifique el namespace de ValidacionController.php. la última ruta debería ser: Validacion (en lugar de “Auth”,
ya que modificamos el nombre de la carpeta)

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

11. Ubique la función “getRegister” y modifique el nombre a “getRegistro”.


12. Dentro de la misma función, modifique los valores retornados, y retorne el texto: “formulario creación cuenta”.

13. Ubique la función “postRegister” y modifique el nombre a “postRegistro”.


14. Ubique la función “getLogin” y modifique el nombre a “getInicio”
15. Ubique la función “postLogin” y modifique el nombre a “postInicio”
16. Ubique la función “getLogout” y modifique el nombre a “getSalida”
17. Ubique la función “loginPath”. En la ruta, al final de la sentencia return, modifique “ ‘/auth/Login’ ” por “
‘/validacion/inicio’ ”
18. Ubique la función getInicio y modifique el valor de retorno de la misma por el texto: “mostrando formulario inicio
sesión”
19. Ubique la función getFailedLoginMessage, es la función que se ejecuta en caso de algún dato incorrecto al
momento de realizar la validación. Modifique su valor de retorno por el texto: “email o contraseña incorrectos.”
20. Ubique la función redirectPath, modifique la ruta en el valor de retorno: ‘/home’ por ‘/inicio’.
Estamos realizando cambios de lenguaje únicamente, más adelante realizaremos cambios funcionales.
21. Crearemos una función para recuperar la cuenta en caso el usuario no recuerde sus credenciales. Agregue una
función al final con el siguiente código:
Nro. DD-106
Desarrollo de Aplicaciones Empresariales – Laravel Página 15 de 77

22. Ahora abra el archivo HomeController.php.


23. Modifique el nombre del archivo a: “InicioController.php”
24. Modifique el nombre de la clase de “HomerController” a “InicioController”
25. Ubique la función Index, modifique el nombre de la función por “getIndex”. Modifique su valor de retorno por el
texto: “página de inicio validado”.

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

1. En la carpeta Controllers, cree un controlador de nombre


FotoController.php
2. En la carpeta Controllers, cree un controlador de nombre
AlbumController.php
3. En la carpeta Controllers, cree un controlador de nombre
UsuarioController.php
4. Copie el contenido de HomeController.php y pegue en el
controlador de Foto.
5. En la línea 3, modifique el nombre de la clase por
“FotoController”
6. Ubique la función getIndex y modifique su valor de retorno
por: “mostrando fotos del usuario”.
7. Cree la función getCrearFoto, y en su valor de retorno
coloque: “formulario de crear fotos”.
8. Cree la función “postCrearFoto”, y en su valor de retorno
coloque: “almacenando foto”.
9. De la misma manera, cree funciones para Actualizar y
eliminar fotos: El resultado debería ser como en la imagen
siguiente:

10. Copie el código de FotoController y pegue el mismo en AlbumController.


11. De manera análoga, el código debería quedar de la siguiente manera:
Nro. DD-106
Desarrollo de Aplicaciones Empresariales – Laravel Página 17 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

13. En el controlador de Album, agregue el siguiente método:

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.

CREANDO RUTAS EN LARAVEL

1. Abra el archivo routes.php ubicado en el directorio app/http.


2. Modifique el contenido del archivo para que quede de la siguiente manera:

3. Probaremos el Index de la aplicación. Ingrese en la URL, la siguiente dirección:

http://gestorlaravel.com

El resultado debería ser:

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.

Probando la ruta para Validado

1. Abra el archivo: GestorImagenes/app/Http/Middleware/Authenticate.php.


2. Ubique la función handle.
3.
Nro. DD-106
Desarrollo de Aplicaciones Empresariales – Laravel Página 19 de 77

4. El archivo Authenticate se encarga de verificar que el usuario esté autenticado o no.


5. Como hemos cambiado nuestros controladores a castellano, modifique la redirección marcada por:
“validacion/inicio”.
6. Abra el archivo: GestorImagenes/app/Http/Middleware/RedirectIfAuthenticated.php.
7. Este archivo se encarga de enviar a una página de Inicio (autenticado), en caso de que el usuario sea autenticado
de manera correcta.

8. Modifique la ruta de home por: “/validado”


Ingrese a la siguiente URL:
http://gestorlaravel.com/validado

El resultado será ser el siguiente:

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.

Ingrese a la siguiente URL:


http:// /GestorImagenes/validado/fotos

El resultado será el siguiente:

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:

1. Ubique el archivo GestorImagenes/app/Http/Middleware/Authenticate.php, y comente el código de


validación en la función handle, de modo que quede de la siguiente manera:

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.

Ahora intente ingresar a la siguiente URL:


Nro. DD-106
Desarrollo de Aplicaciones Empresariales – Laravel Página 21 de 77

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

Ahora intente ingresar una URL inexistente.

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. Haga una copia del archivo GestorImagenes/Resources/Views/errors/503.blade.php, en el mismo


directorio, pero renombre el nuevo archivo a “404.blade.php”.
2. Abra el archivo copiado y cambie el texto “be right back” por “not found page”
3. Nuevamente, intente introducir una URL inexistente.

CREANDO LAS PRIMERAS VISTAS

1. Ubique el archivo app.blade.php y modifíquelo en las siguientes líneas (cambio de idioma unicamente)

a. Línea 36 modifique “Home” por “Inicio”.


b. Línea 41 modifique “Login” por “Iniciar Sesión”.
Nro. DD-106
Desarrollo de Aplicaciones Empresariales – Laravel Página 22 de 77

c. Línea 42 modifique “Register” por “Registrarse”.


d. Línea 47 modifique “Logout” por “Salir”.

2. Ahora modifique las siguientes líneas para modificar los controladores, el archivo debería quedar de la siguiente
manera:

3. Abra la vista home.blade.php y modifique el nombre a “inicio.blade.php”


4. Abra la vista welcome.blade.php y modifique el nombre a “bienvenida.blade.php”
5. Borre el código de bienvenida.blade.php.
6. Copie el código de inicio.blade.php a bienvenida.blade.php
7. En bienvenida.blade.php, cambie el texto “Home” por el texto “Inicio”
8. En bienvenida.blade.php, modifique el texto “you are logged in” por “Por favor inicie sesión para usar el
sistema.”
9. En inicio.blade.php, modifique el texto “you are logged in” por “Bienvenido (usuario)”, más adelante usaremos el
verdadero nombre del usuario logeado.

Renderizando las vistas

Hasta ahora, tenemos 3 vistas creadas, aunque 2 funcionales solamente.

1. Abra BienvenidaController.php y ubique el action getIndex().


2. Cambie el mensaje de retorno a
3. Abra InicioController.php y ubique el action getIndex().
4. Cambie el mensaje de retorno a

Probando la funcionalidad del código.

1. Abra el buscador y coloque la siguiente URL:


http://gestorlaravel.com
El resultado debería ser el siguiente:

2. Procure ingresar a “Iniciar Sesión” y luego a “Registrarse”.


Nro. DD-106
Desarrollo de Aplicaciones Empresariales – Laravel Página 23 de 77

3. Abra el archivo “ValidacionController.php”.


4. Ubique la función getRegistro(), y modifique su valor de retorno a:
El “.” (punto) se debe a que la vista está en una carpeta llamada “validacion”.
5. Ubique la función getInicio(), y modifique su valor de retorno a:
El “.” (punto) se debe a que la vista está en una carpeta llamada “validacion”.

Creando las vistas

1. Ingrese a la sub-carpeta de la carpeta VIEWS de nombre auth.


2. Modifique la vista de nombre “login.blade.php” por “inicio.blade.php”.
3. Modifique la vista de nombre “register.blade.php” por “registro.blade.php”.
4. Elimine las vistas “reset.blade.php” y “password.blade.php”.
5. Abra el archivo “inicio.blade.php” y modifique la línea 21 como en la figura de abajo, indica que el action del
formulario para iniciar sesión deberá redireccionar a nuestra página inicio.

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”.

9. De manera análoga en la vista registro.blade.php, realice los cambios resaltados a continuación:


Nro. DD-106
Desarrollo de Aplicaciones Empresariales – Laravel Página 24 de 77

10. Ubique la sub-carpeta dentro de Vistas de nombre “Auth” y renombre a: “validacion”.


11. En el navegador ponga la siguiente dirección:

http://gestorlaravel.com/validacion/inicio

El resultado debería ser el siguiente:


Nro. DD-106
Desarrollo de Aplicaciones Empresariales – Laravel Página 25 de 77

De la misma manera intente entrar al link registrarse, el resultado debería ser el siguiente:

Creando Vista para recuperar la contraseña

1. Cree una nueva vista en la subcarpeta “validacion” de nombre: “recuperar.blade.php”.


2. Copie el código de la vista “registro” a la vista “recuperar” y haga las modificaciones indicadas en la imagen a
continuación:
Nro. DD-106
Desarrollo de Aplicaciones Empresariales – Laravel Página 26 de 77

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

CREANDO MIGRACIÓN DE MODELOS A LA BASE DE DATOS

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.

2. Ingrese el siguiente comando para crear el archivo “CrearTablaAlbumes”

php artisan make:migration --create="albumes" CrearTablaAlbumes

3. Ingrese el siguiente comando para crear el archivo “CrearTablaFotos”

php artisan make:migration --create="fotos" CrearTablaFotos

4. Asegúrese de que los archivos se visualicen en la carpeta Database

5. Borre el archivo “create_password_resets_table.php”, ya que nuestra modalidad de recuperado de contraseña,


será diferente.

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

Ahora modificaremos el archivo de migraciones para “album”

2. Abra el archivo “CrearTablaAlbumes” y modifíquelo para que quede de la siguiente manera:

3. De manera análoga modifique el archivo “CrearTablaFotos” y modifíquelo para que quede de la siguiente manera:

4. Grabe los archivos de migración.


5. Ingrese a la ventana de comandos con ruta en nuestro proyecto.
6. Ejecute el siguiente comando para proceder con la migración:

php artisan migrate

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

1. Abra el archivo GestorImagenes/database/sedes/DatabaseSeeder.php.


2. Modifique el archivo para que quede de la siguiente manera:

Es importante el
orden de creación
de los Seeders,
primero van las
tablas menos
dependientes de
otras.

-DB:statement…. Indica que al momento de trabajar


con las tablas, no verifique claves foráneas y así
eliminar dependencia entre las mismas.
-La función Truncate, sirve para que al momento de
ejecutar el programa, se elimine todo tipo de registro
en las tablas en mención de modo que siempre
aparezcan valores por defecto

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

5. Modifique el archivo AlbumesSeeder para que quede de la siguiente manera:

6. Modifique el archivo FotosSeeder para que quede de la siguiente manera:


Nro. DD-106
Desarrollo de Aplicaciones Empresariales – Laravel Página 31 de 77

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.

8. Abra la ventana de comandos con ruta en el proyecto y ejecute el siguiente comando:

php artisan db:seed

El resultado debería ser similar al siguiente:

Explore la base de datos y responda:


¿Qué sucedió?

___________________________________________________________________________________

___________________________________________________________________________________

___________________________________________________________________________________

CREANDO MENSAJES Y PÁGINAS DE EXCEPCIÓN PERSONALIZADAS

1. Abra el archivo app/exception/Handler.php, y modifique las líneas resaltadas en la función render


a. Primero importe la librería siguiente:
Nro. DD-106
Desarrollo de Aplicaciones Empresariales – Laravel Página 32 de 77

b. Luego modificaremos la función render para que quede de la siguiente manera.

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.

Para probar que el error se está dando haremos lo siguiente:

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.

Asumiendo que ya estoy en modo debug (TRUE en el archivo .env).

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

2. Vamos a probar que el error se dé por la excepción de Token…


a. Primero nos dirigimos a la vista de inicio, modificamos su contenido para agregar el siguiente código:

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.

3. Vamos a probar una excepción en el inicio al momento de tratar de acceder a la aplicación.


a. El primer caso es que el usuario no esté validado, de modo que modificaremos el archivo
bienvenida.blade.php, y le añadiremos el siguiente código:
Nro. DD-106
Desarrollo de Aplicaciones Empresariales – Laravel Página 34 de 77

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

ACCESO Y VALIDACIÓN DE USUARIOS

1. Identifiquemos el error que se produce al momento tratar de iniciar sesión con una cuenta errónea.

2. Clic en “Iniciar Sesión”.

NOTA: El error presentado indica que no existe la clase Request.

Este error se debe a que no lo estamos importando, por ende, no estamos haciendo uso de ella.

3. Diríjase a la clase ValidaciónController y agregue el “USE” que se indica a continuación:

Ahora modificaremos otro posible error.


Cuando el usuario intente cerrar sesión hará uso de la función a continuación:
Nro. DD-106
Desarrollo de Aplicaciones Empresariales – Laravel Página 36 de 77

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.

Para registrarse, se hace uso de la función postRegistro()


Nro. DD-106
Desarrollo de Aplicaciones Empresariales – Laravel Página 37 de 77

¿Dónde se encuentra la clase Registrar?


4. Ubique el archivo app/Services/Registrar.php.

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:

Hasta aquí, tenemos lista la forma de validación de datos en el formulario de registro.


Regresando a la función postRegistro():

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.

TAREA: INVESTIGUE INYECCIÓN POR DEPENDENCIA EN LARAVEL.

6. Modifique el archivo Registrar.php para que coincida con el siguiente código:

Esta modificación se realizó para que al momento de crear un usuario.


Laravel utiliza una tabla por defecto para la creación y validación de una cuenta de usuarios. Esto se hace por medio de la
carpeta CONFIG, en su archivo AUTH.

7. Modifique el archivo app/config/auth.php. Asignemos el verdadero modelo.

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.

¿Cuáles fueron las credenciales utilizadas para acceder al sistema?

__________________________________________________________________________________________________

El resultado debería ser el siguiente:

Para darle un poco más de estilo, vamos a modificar la palabra usuario por el nombre del usuario que está ingresando al
sistema.

8. Abra el archivo inicio.blade.php y modifique la impresión de la siguiente manera:


Nro. DD-106
Desarrollo de Aplicaciones Empresariales – Laravel Página 39 de 77

9. Actualice la página y observe los cambios. El elemento Auth, es quien tiene las credenciales del usuario registrado.

10. Cierre Sesión.


11. Ingrese al menú para registrarse y ponga sus datos.
Nro. DD-106
Desarrollo de Aplicaciones Empresariales – Laravel Página 40 de 77

Resultado:

12. Verifique la creación del usuario en la tabla correspondiente en MySql.

MODIFICANDO EL REQUEST DEL INICIO DE SESION

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).

2. Abra la ventana de comandos y escriba el siguiente código:

3. Verifique que el archivo haya sido creado en la carpeta de requests.


Nro. DD-106
Desarrollo de Aplicaciones Empresariales – Laravel Página 41 de 77

Tenemos por ejemplo a la función authorize():


Puede devolver verdadero o falso, cuando retorne falso, se entiende
que el usuario que hizo un tipo de petición no tiene el permiso
suficiente para realizar la acción, sin embargo, como siempre se va a
tratar de una operación de petición, el retorno será siempre TRUE.

4. Seguidamente corte el código de las reglas detalladas en el


action postInicio(), a la función rules() de nuestro Request
creado.

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.

CREANDO LA FUNCIONALIDAD PARA RECUPERAR LA CONTRASEÑA POR PARTE DEL USUARIO

Ahora crearemos la funcionalidad para que el usuario pueda recuperar su contraseña.

1. Ubiquemos el action postRecuperar() en ValidacionController.

Vamos a crear un Request personalizado para este proceso.

¿Cuál sería el proceso de crear un Request de nombre: “RecuperarContrasenaRequest”?

___________________________________________________________________________________________________

Créelo y coloque el resultado de la ejecución del comando adecuado.

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.

4. En el Request recientemente creado coloque en “true”, el valor de retorno en su función authorize:

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:

6. Ahora modifique la función postRecuperar() para que quede de la siguiente manera:

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.

7. Ingrese a la vista de Inicio para modificar el siguiente código:


Nro. DD-106
Desarrollo de Aplicaciones Empresariales – Laravel Página 44 de 77

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:

CREANDO LA FUNCIONALIDAD: ACTUALIZAR PERFIL DE USUARIO

Ahora procederemos a crear la funcionalidad para actualizar los campos del usuario, es decir, darle el derecho de actualizar
el perfil.

1. Cree una carpeta dentro de la carpeta de vistas(views) con el nombre “usuario”.


2. Dentro de la carpeta creada, cree un archivo de nombre “actualizar.blade.php”.
3. A este archivo copie el código de la vista Registro.
4. Pero antes, ubique la función getEditarPerfil(), en el controlador del usuario y modifíquelo para que se haga uso
de la vista que hemos creado.

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.

6. Ahora modifique la vista actualizar.blade.php para que quede de la siguiente manera:


Nro. DD-106
Desarrollo de Aplicaciones Empresariales – Laravel Página 45 de 77

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.

8. Cree un Request nuevo con la consola de comandos de nombre: “EditarPerfilRequest”.


9. En el nuevo Request creado ponga en true el valor de retorno de la función authorize() y añada las reglas como se
muestra en la imagen a continuación.
Nro. DD-106
Desarrollo de Aplicaciones Empresariales – Laravel Página 46 de 77

10. En el controlador del usuario, importe el request creado en el punto anterior:

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

CREANDO LA FUNCIONALIDAD DE MOSTRAR ÁLBUMES

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.

1. Abra el controlador de Album Controller


2. Ubique la función por defecto (getIndex()).
3. Importaremos la definición de Auth para obtener los datos del usuario loggeado y modificaremos el action para
que quede de la siguiente manera:

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

CREANDO LA FUNCIONALIDAD PARA MOSTRAR FOTOS

1. Cree un nuevo Request de nombre: “MostrarFotosRequest”.


2. En el controlador de las fotos, referencie al request recientemente creado.
3. En el controlador de las fotos, referencia a los modelos Album y Foto
4. Modifique el código del request de la siguiente manera:

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

6. Cree la carpeta fotos en las vistas y dentro de ella la vista mostrar.blade.php


7. Puede copiar el código de mostrar los álbumes de un usuario ya que es bastante similar, sin embargo modifique el
código para que quede de la siguiente manera:

8. Verifique que un álbum contenga fotos en el sitema.

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

INSERTANDO ÁLBUMES EN LA BASE DE DATOS

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:

3. Cree un Request de nombre: “CrearAlbumRequest”.


4. Referencie al request recientemente creado en el controlador de Álbum.
5. Modifique el request de la creación de álbum para que el código quede de la siguiente manera:
Nro. DD-106
Desarrollo de Aplicaciones Empresariales – Laravel Página 54 de 77

6. Primero referencie en el controlador de Album a su Modelo (al modelo del álbum).


7. En el controlador de Album y nos ubicamos en el action postCrearAlbum(), lo modificamos de la siguiente manera:

8. Para mejorar la vista luego de la creación de un álbum, inserte el código siguiente en la vista de Mostrar Álbum

9. Intente crear un nuevo álbum y verifique que se haya hecho lo correcto


Nro. DD-106
Desarrollo de Aplicaciones Empresariales – Laravel Página 55 de 77

INSERTANDO FOTOS EN LA BASE DE DATOS

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

1. Abra el controlador de Foto. Modifique la función getCrearFoto()

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.

3. Abra la vista mostrar.blade.php de fotos y modifique el código de la siguiente manera:

De esta manera, cuando creemos una nueva foto el id del álbum estará siendo enviado desde esta vista =).

4. Cree un Resquest nuevo de nombre: “CrearFotoRequest”.


5. Modifique el Request creado de la siguiente manera:

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.

Ahora vamos a crear la vista para crear la foto.

6. Cree la vista de nombre crear-foto.blade.php en la carpeta de fotos en vistas.


Nro. DD-106
Desarrollo de Aplicaciones Empresariales – Laravel Página 57 de 77

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.

No olvidarse de referenciar a la librería Request en la cabecera del documento:

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.

ATENCIÓN: ESTE ES UN PASO OPCIONAL.


Nro. DD-106
Desarrollo de Aplicaciones Empresariales – Laravel Página 59 de 77

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:

1. Abrir el archivo PHP.INI de nuestros servidores


2. Procedan a buscar el texto “fileinfo” y es una extensión que debería estar SIN COMENTARIO para que se pueda
hacer uso de ella.

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

CREANDO LA FUNCIONALIDAD PARA EDITAR UN ÁLBUM

1. Ingrese al controlador de Álbum


2. Ubique la función getActualizarAlbum(), modifique el código para que quede de la siguiente manera.

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.

¿Qué hicimos al agregar esa línea?

____________________________________________________________________________________________________

____________________________________________________________________________________________________

6. Ahora diríjase al controlador de álbum nuevamente.


7. Antes, cree un nuevo Request de nombre: “ActualizarAlbumRequest”
8. Ahora diríjase al controlador de álbum y referencie al request creado en la cabecera del documento.
9. Edite el Request de Actualizar Álbum. El código en la función authorize(), de este request será el mismo que se
encuentra en la función authorize(), del Request de CrearFoto. Así que cópielo y péguelo tal cual está.

¿De qué se encarga la función authorize() en este Request?

___________________________________________________________________________________________________

___________________________________________________________________________________________________

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

¿Qué se hizo en el código mostrado?

____________________________________________________________________________________________________

____________________________________________________________________________________________________

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.

Pruebe el programa y verifique que se encuentra funcionando correctamente.

CREANDO LA FUNCIONALIDAD PARA EDITAR UNA FOTO – MOVER Y COPIAR ARCHIVOS

1. Diríjase al controlador de las fotos y ubíquese en el action getActualizarFoto().


2. Realice los siguientes campos en la función:

Explique: ¿Qué se hizo en esta función?

_____________________________________________________________________________________________________

_____________________________________________________________________________________________________

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

5. Cree un nuevo Request de nombre “ActualizarFotoRequest”.


6. No se olvide de referenciar a este Request en el controlador de Foto, que es donde se utilizará esta clase.
7. Diríjase al Request creado recientemente.
8. No se olvide de usar la definición de la librería Auth, en la cabecera del documento.
9. En el Request edite el código para que quede de la siguiente manera:
Nro. DD-106
Desarrollo de Aplicaciones Empresariales – Laravel Página 65 de 77

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.

Explique Línea a línea lo que el código pretende hacer:

_____________________________________________________________________________________________________

_____________________________________________________________________________________________________

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:

¿Qué hace el código de la vista?

____________________________________________________________________________________________________
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.

CREANDO LA FUNCIONALIDAD PARA ELIMINAR ÁLBUMES Y FOTOS

Vamos a trabajar con la última parte del CRUD, que viene a ser la eliminación.

Si un álbum va a ser eliminado desde la vista: Mostrar de los álbumes.

¿Será necesario usar un método getEliminarAlbum?

_____________________________________________________________________________________________________

1. Diríjase al método getEliminarAlbum en el controlador de Álbum y proceda a eliminarlo.


2. Ahora nos centraremos en la función postEliminarÁlbum.
3. Cree un Request nuevo de nombre: “EliminarAlbumRequest”. Posterior a eso, no se olvide de referenciarlo en el
controlador de Álbum.
4. En el Request creado, modifique las funciones authorize y rules, para que queden de la siguiente manera:
Nro. DD-106
Desarrollo de Aplicaciones Empresariales – Laravel Página 67 de 77

5. Ahora diríjase al controlador de Álbum en su action “postEliminarAlbum” y modifíquelo de la siguiente manera:

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

Pruebe el programa. Intente eliminar un álbum y verifique los resultados.

Ahora continuaremos con la eliminación de Fotos

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

Explique: ¿Qué hacen las dos funciones importantes en este request?

___________________________________________________________________________________________________

___________________________________________________________________________________________________

5. Modifque la función postEliminarFoto, para que quede de la siguiente manera:

Investigue:

Cuál es la finalidad de la función unlink, file_exists y realpath.

Explique línea a línea la funcionalidad del código mostrado en la función.

___________________________________________________________________________________________________

___________________________________________________________________________________________________

Ahora para crear el botón para eliminar una foto en la vista de mostrar fotos:

6. Ingrese a la vista mostrar de Foto, y agregue el siguiente código:

PRUEBE LA ELIMINACIÓN DE FOTOS


Nro. DD-106
Desarrollo de Aplicaciones Empresariales – Laravel Página 70 de 77

MEJORANDO EL PROYECTO

En esta sección corregiremos y mejoraremos el proyecto en la parte visual y de usabilidad del sistema.

1. Abra la vista app.blade.php


2. Modifique aproximadamente la línea: 31, cambie el texto Laravel por “Gestor Imágenes”

3. Abra el archivo mostrar.blade.php de los álbumes y agregue el código siguiente:


Nro. DD-106
Desarrollo de Aplicaciones Empresariales – Laravel Página 71 de 77

4. Abra el archivo mostrar.blade.php de las fotos y agregue el código siguiente:

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:

Anote los detalles más resaltantes del código anterior:

__________________________________________________________________________________________________

__________________________________________________________________________________________________

COMANDO PARA RE-ALIMENTAR LA BASE DE DATOS

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)

Si ha tenido el error haga lo siguiente:


1. Abra el archivo de migraciones que le pertenece a la tabla Usuario.
Nro. DD-106
Desarrollo de Aplicaciones Empresariales – Laravel Página 73 de 77

2. Identifique la función down().


3. Dentro de esta función cambie el contenido de la función drop(‘users’) por drop(‘usuarios’)

4. Si prueba nuevamente el comando el resultado debería ser el siguiente:

5. Acceda con las credenciales creadas recientemente y pruebe la funcionalidad del programa.

MIGRANDO EL PROYECTO DE LARAVEL 5.0 A 5.1

Para verificar la versión de Laravel que tenemos en nuestros ordenadores:

1. Ingrese a la ventana de comandos CMD, y ubíquese en la carpeta de nuestro proyecto.


2. Escriba el siguiente resultado para comprobar la versión de Laravel a la que pertenece nuestro proyecto:

php artisan –version

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).

Ahora modificaremos un fragmento de código en formato JSON de Composer en nuestra aplicación.

"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

Este es el archivo resultante.

Vamos a actualizar las dependencias que hemos agregado en Composer:

3. Nuevamente ubíquese en la consola de comandos con ruta en nuestro proyecto y digite lo siguiente:

composer update

Es posible que al final de la actualización, no se encuentre un archivo y se dé un error.


Este error se da por los cambios realizados en las versiones de Laravel.

1. De acuerdo al error obtenido, ingrese al archivo /GestorImagenes/Bootstrap/autoload.php


2. Modifique la ruta del directorio para que quede de la siguiente manera:
Nro. DD-106
Desarrollo de Aplicaciones Empresariales – Laravel Página 75 de 77

3. Cree una carpeta llamada “cache” dentro de la carpeta Bootstrap.

4. Dentro de la carpeta “cache”, cree un archivo de nombre “.gitignore”.


5. Al archivo creado, agregue el siguiente fragmento de código.

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.

1. Ubíquese en el archivo ValidacionController.php.


2. En el constructor de la función borre los parámetros de entrada
3. Borre también las dos primeras líneas del código contenido en el constructor. Luego de ambos cambios, el código
del constructor debería quedar como en la siguiente imagen.
Nro. DD-106
Desarrollo de Aplicaciones Empresariales – Laravel Página 76 de 77

4. Dentro de la carpeta Services, se encuentra el archivo Registrar.php.


5. Copie el contenido (las dos funciones que contiene este archivo).

6. Pegue el código copiado debajo de la última función del controlador de Validacion .


7. Borre el archivo Registrar.php
8. En ValidacionController,php

Anda mungkin juga menyukai