Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                

Manual Framework Laravel

Descargar como docx, pdf o txt
Descargar como docx, pdf o txt
Está en la página 1de 28

FRAMEWORK LARAVEL

- SECCION 1: CONCEPTOS BASICOS


o Instalar Laragon -> Terminal ctrl + alt + t
 Git -> veremos toda la información de git
 Composer -> toda la info de composer, Manejador de paquetes de PHP
 Php –v -> la versión de php
 Node –v -> versión de NodeJs
 Npm –v -> versión NPM

Primer método de crear un proyecto en Laravel

Primer paso para crear proyectos más rápido en Laravel

Tenemos acceso al comando Laravel !


Luego este sería el paso para crear un nuevo proyecto en Laravel, la primera vez que lo usemos
demorará un poco porque se tiene que bajar todos los paquetes del cual depende laravel. Luego el
proceso no demora tanto.

RUTAS

- Linea 3 como acceder a mi página de inicio


- Linea 4 como accedo a otro sitio de mi página inicio a través de un parámetro donde el
primero recibe el nombre de la ruta y el otro parámetro es la función donde se va a
retornar algo.

- Hay algunos
nombres de rutas que reciben parámetros, para ello después del nombre de la ruta
debemos asignar el parámetro entre llaves, luego este parámetro pasarlo a la función
- Si no se pasa un parámetro decimos que el parámetro es obligatorio pero hay veces que
tiene que ser opcional así que debería de ser de la siguiente manera

- Para validar un parámetro se hace de la siguiente manera

- Porque y para qué son las rutas con nombres. Supongamos que tenemos 5 sitios y
queremos hacer referencia al nombre de la ruta contáctanos. Primera solución

- Si funcionaría pero,
no es una buena práctica porque si la empresa crece y luego tenemos 20 0 50 locales más,
tendríamos que cambiar el nombre de la url y el de todas las etiquetas. Para eso una
mejor solución sería darle nombre a la ruta usar la Funcion route que recibe como
RUTAS Y VISTAS

- Como devolver una vista.

- Etiquetas con direccionamiento a otros sitios de nuestra paginas usando la buena práctica
de rutas con nombres

o Codigo en routes.php
NOTA: ES UNA MALA PRACTICA YA QUE HAY UNA DUPLICACION DE CÓDIGO

MOTOR DE PLANTILLA BLADE DE LARAVEL

- El motor de plantillas de Laravel se llama Blade. Finalidad evitar la duplicidad de código


HTML Y CSS
- Se hace echo a una variable php como se muestra en la línea 9.

La variable $nombre implementada en el archivo route.php al usar el motor de plantillas blade, la


variable ya puede ser usada en el archivo .blade.php. Como se muestra en la segunda figura.

NOTA: Compilacion store/framework/views/nombre.php

Al estar
encerrado en 2 llaves significa que la variable pasa por una función nativa de php – htmlentities.
Otra forma de ponerlo en así {!! $nombre !!} Su significado es ponernos en alerta porque pueden
LOOPS EN BLADE -> @foreach o @forelse El @foreach imprimirá todos los valores que habrá en
un array pero si no hay habrá un error al momento de recorrerlo. La otra opción para este caso es
el @forelse, si el array esta vacío se valdrá de un @empty para imprimir un mensaje.

Tenemos también @if muy similar a todos los lenguajes de programación

MIDDLEWARE->Capa que interceptan las peticiones del usuario y verifica que se cumplan las
reglas en caso no se cumpla la regla, la petición es eliminada. Interceptar un request, verificar que
se cumplan sus reglas y en consecuencia dejarlo continuar o no.

MIGRACIONES BASE DE DATOS


Php artisan migrate realiza la función UP de la migración

Php artisan migrate:rollback realiza la función DOWN de la migración

Php artisan make:migration create_messages_table –create=messages

- Crea la migración con toda la estructura y con el nombre de la tabla messages

DOCUMENTS AVAILABLE COLUMNS TYPE -> Encontraremos info sobre todos los tipos de datos
que hay para agregar.

En el supuesto caso de que el proyecto ya esté en producción. Pasado el tiempo en la tabla


“messages” nos piden que agreguemos el campo “phone” sin perder la información. Una solución
sería agregar el campo en la migración “messages” luego hacer rollback y por último migrate para
que nos agregue el campo PERO! Perderiamos la información, una solución ah ello sería lo
siguiente

Php artisan make:migration add_phone_to_messages_table --table=messages

El archivo en vez de decir Schema::create dirá -> Schema::table !

Luego se agregaría el campo a la tabla en la función UP y la función dropColumn en la función


DOWN

Por último seria hacer php artisan migrate que subirá la actualización hecha en el proyecto a la BD.

Si en caso queremos deshacernos de lo que hicimos haremos php artisan migrate:rollback Luego
php artisan migrate para que se suba un nuevo cambio.

PARA NO ESTAR HACIENDO ROLLBACK Y MIGRATE HAY UN COMANDO QUE AGRUPA A LOS DOS

PHP ARTISAN MIGRATE:REFRESH -> PRIMERO HARÁ EL ROLLBACK DESPUÉS HARÁ EL MIGRATE

GUARDANDO DATOS MEDIANTE QUERY BUILDER

TEORÍA
- ESTILO DE ARQUITECTURA REST
o DEFINE EL COMPORTAMIENTO ENTRE CLIENTE Y SERVIDOR
o GIRA ALREDEDOR DE RECURSOS: INFORMACION DE UN BD.
o DEFINIR URLS ESPECIFICAS QUE RESPONDAN A DIFERENTES TIPOS DE PETICIONES
HTTP

REST
METODO HTTP URL ACCION RESPUESTA
GET /mensajes MessagesController@index Todos los mensajes
GET /mensajes/create MessagesController@create Formulario de creación
POST /mensajes MessagesController@store Guarda mensajes y redirecciona
GET /mensajes/{id} MessagesController@show Un mensaje en especifico
GET /mensajes/{id}/edit MessagesController@edit Formulario de edición
PUT/PATCH /mensajes/{id} MessagesController@update Actualiza mensaje y redirecciona
DELETE /mensajes/{id} MessagesController@delete Elimina mensaje y redirecciona

CRUD
CREATE POST
READ GET
UPDATE PUT/PATCH
DELETE DELETE
CODIGO DE LAS RUTAS SEGÚN EL CUADRO DE ARRIBA

CODIGO DE CONTROLADOR

php artisan make:controller MessagesController –resource

lo crea con todos los métodos: index, create, store, show, edit, update y destroy.
EN ESTA FORMA HABRÁN 4 VISTAS: INDEX, CREATE, SHOW Y EDIT
ELLOQUENT

Es el ORM (Mapa Objeto-Relacional):Representacion de una tabla de BD en objetos o clases de


una aplicación.

Tabel => messages => Clase = Message


ROLES

Crear nuestro middleware : php martisan make: middleware CheckRoles

Una vez creado el middleware se define la lógica en el handle pero, primero veamos el constructor
del controlador UsersController. Este controlador hace el llamado al middleware ‘auth’ donde solo
ingresaran los que estén autenticados. Luego llama al middleware ‘roles:admin’ Ok, los ‘:’ significa
que se le están pasando un parámetro. Eso se aprecia en la función handle.
Como dijimos se están pasando un array, este array lo recibimos en el handle con $roles y las

siguientes funciones array_slice -> devuelve un array con todos los valores menos, los dos
primeros. El array que se devuelve es el func_get_args -> Obtenemos todos los valores pasados
en el constructor y el handle, CON dd($roles) podemos apreciar los valores. Luego viene la
condicional. Auth()->user()->hasroles($roles) Auth: la autentificación, user, devuelve el usuario
que se autentificó y ejecuta el método hasRoles del Modelo Elloquent User

Este método, recibe como parámetro un array, que justamente es el que se pasó: $roles Luego se
hace un foreach donde dentro de ella está la condición donde validaremos: El rol del usuario que
se haya autentificado sea igual a uno de los valores del array definidos en el controlador. En este
caso se definió solo ‘admin’ pero nos logueanos con un estudiante definido en la base de datos.

Como no será igual al array definido devolverá falso y según el layout. Todos los que estén
autenticados y luego cumplan que su Rol es ‘admin’ podrán ver el Link Usuarios.
RELACIONES EN ELLOQUENT

En la tabla usuario teníamos un campo role tipo string, se cambia por role_id tipo integer, para
manejar en otro tabla Roles, todos los roles que tenga un usuario y en la tabla usuario, solo
haríamos referencia al identificador del rol.

Para cambiar, hacer el php artisan migrate: Subirá los cambios pero, perdemos la info, sino
queremos eso recordar hacer: php artisan make:migration add_role_id_to_users –table=users.

Php artisan make:model Role –m : Crea el modelo y a la vez crea la migración.

A continuación se ve el código de la migración Role

RELACIONES UNO A NO

Un usuario va a tener un rol. Para hacer una relación en elloquent creamos una función usando el
método belongsTo -> Pertenece ah, en este caso al modelo Role.
Desactivamos un momento el middleware que hace referencia al acceso del link Usuarios.

Veamos lo siguiente en la vista index.blade.php de la carpeta Users

Vemos que user hace referencia al método que acabamos de crear en el modelo User, lo cual nos
retorna lo siguiente.
Todos los atributos del modelo Role, lo cual no queremos eso. Para acceder a uno de ellos,
debemos de hacer lo siguiente en la vista index.blade.php de la carpeta User.

Hacer referencia a uno de los atributos

Vemos lo siguiente

Ahora recuerdas que desactivamos el middleware bueno es por lo siguiente. Recordemos que
‘roles:admin’ Accederá al middleware CheckRoles, segunda imagen.
En el método handle hacemos que el usuario autenticado, llame a su método hasRoles.

Así que en el modelo User vemos lo siguiente:

Que si lo dejamos tal como está, el autenticado accederá a su método rol pero llamará a todos los
atributos del modelo Role, como nos pasó en la vista usuarios.

Por lo tanto debemos hace


referencia a su name, ya que en layout y en controller mandamos como parámetro, admin así que
de la misma forma que lo hicimos en la vista index.blade.php de la carpeta User, lo haremos en
Por ultimo esta prueba quiere decir que podemos acceder al rol a través del usuario pero no
podemos acceder al usuario a través del rol.

Haremos lo siguiente para hacer lo contrario, acceder al usuario a través del rol. Una ruta de
prueba que retorne todos los roles.

Supongamos que quiero que me devuelva el rol

Para hacerlo vamos al modelo rol y creamos el método User.

Para que nos muestre, debemos de cambiar la ruta por la siguiente que en pocas palabras vamos a
obtener todos los roles con sus usuarios correspondientes.
Esta es la relación hasOne que aunque tengamos más de un usuario con el rol admin,, solo nos
mostrará uno.
Si queremos mostrar todos los usuarios usamos la relación hasMany
COMO ASIGNAR VARIOS ROLES A UN USUARIO

PARA ESTO DEBEMOS DE CREAR NUESTRA TABALA PIVOTE HAY UNA CONVENSIÓN

Con php artisan make_migration create_assigned_role_table –create=assigned_role -> y


ejecutamos. Pero esta tabla la tenemos que pasar como parámetro en un método.

Agregar los atributos.

Luego refrescamos la BD con php artisan migrate:refresh

Creando usuarios con tinker

Se hace
Para establecer las relaciones se hará lo siguiente luego vendrá la explicación.

Antes habíamos
hecho una relación belongsTo, donde solo pasábamos como parámetro el modelo Role, después
en cada método que se usaba, instanciabamos uno de sus atributos. Pue bueno ahora sucede lo
contrario, recuerda que ahora varios roles le pueden pertenecer a un usuario, así que ahora

Ahora para decir que tiene muchos roles, se hace con belongsToMany, donde podemos poner la
tabla que por convención se puede hacer o una tabla propia que nosotros creemos pero esta se
pasa como parámetro. En este caso fue: ‘assigned_roles’

Y el método hasRoles quedaría de la siguiente manera

Ahora lleva un bucle, debido a lo mencionado: Estamos recibiendo un array de objetos, recibimos
como parámetro los roles definidos, y el autenticado accede a su método roles luego se hace la
condición si su Rol o los roles que tenga son igual o iguales a los pasados por parámetros.
Y la vista index donde se muestran a los usuarios quedaría de la siguiente manera

Como se aprecia, lo que


cambia solo es la columna Role, haciendo un bucle, donde aquí se llama a su método con el alias
AGREGANDO BOTONES A LA VISTA DE USUARIOS

VISTA INDEX DE USUARIOS


VISTA EDIT DE USUARIOS

CONTROLADOR UserController

CREAMOS UN REQUEST PARA NO PERMITIR QUE PUEDAN ENVIAR VALORES NULOS Y LOS
CORREOS NO SE REPITAN.
POLITICAS DE ACCESO

Politicas de acceso: Son clases de php que agrupan lógicas de autorización basado en los modelos
que se quiere autorizar.

php artisan make:policy UserPolicy

Las políticas de acceso se registran en la carpeta Providers\AuthServiceProvider. Aquí se asigna


una política de acceso a un modelo.

1ra forma:

2DA forma: El modelo User

1. Hay que comprobar si el usuario que está visitando esta ruta de UserController, es el
mismo que el que estamos consultando en la Base de Datos.
2. Para ello vamos al UserPolicy y creamos un método con el mismo nombre que el
controlador, en esta caso edit.

También podría gustarte