Manual Framework Laravel
Manual Framework Laravel
Manual Framework Laravel
RUTAS
- 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
- 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
- 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
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.
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.
DOCUMENTS AVAILABLE COLUMNS TYPE -> Encontraremos info sobre todos los tipos de datos
que hay para agregar.
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
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
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
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.
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.
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.
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.
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.
Haremos lo siguiente para hacer lo contrario, acceder al usuario a través del rol. Una ruta de
prueba que retorne todos los roles.
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
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’
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
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.
1ra forma:
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.