
En esta lección integramos la plantilla html y css del Blog con Laravel
Configuramos la conexión a base de datos, y creamos la tabla para los posts, utilizando las migraciones en Laravel. También creamos el modelo de Eloquent para interactuar con los posts en la base de datos.
Utilizando el modelo Post, hacemos un foreach para imprimir en pantalla todos los posts que tenemos en la base de datos.
Eloquent reconoce las fechas de creación y actualización com instancias de Carbon para manejar las fechas más eficientemente, sin embargo, hemos creado un campo para almacenar la fecha de publicación del post y debemos informarle a Eloquent sobre esto
Creamos el modelo y la migración para las categorías y utilizamos Eloquent para definir la relación con el modelo Post que nos permitirá asociar posts con categorías.
Cuando estamos desarrollando y probando nuestras aplicaciones, es necesario tener datos de prueba en la base de datos, para ir verificando el comportamiento de la aplicación, y llenar estos datos manualmente puede consumir gran cantidad de nuestro tiempo, sin embargo, con Laravel, tenemos a disposición los Seeders que nos ayudan con esta tarea.
Creamos el modelo y la migración para las Etiquetas, y definimos la relación de “muchos a muchos” con el modelo Post. De esta forma, podremos asociar varias etiquetas a un mismo post, y cada etiqueta podrá tener varios posts asociados.
En esta lección comenzamos con la creación de un panel de administración. Para la interfaz gráfica utilizaremos la plantilla gratuita de administración AdminLte. Esta vez la integraremos de forma manual.
Utilizamos el login básico que viene con laravel y lo adaptamos a la plantilla de administración AdminLTE.
Traducimos al español el texto del login y los mensajes de validación del formulario.También creamos el primer usuario y restringimos el acceso a la administración.
Agregamos los primeros links de navegación de la administración, y con el fin de mejorar la estructura de nuestro código comenzamos a utilizar controladores.
Agregamos una vista en la administración para ver todos los posts utilizando el plugin de JQuery llamado Datatables.
Cambiamos la redirección de la url “home” a “admin” para las páginas de administración. Y agregamos la clase “active” a los links de navegación para que nos indique en qué página estamos
En esta lección creamos el formulario para crear las publicaciones
En esta lección integramos un datepicker para permitir al usuario seleccionar fechas a través de un calendario. También optimizamos la carga de las páginas de administración utilizando la directiva de BLADE llamada STACK.
En esta lección vemos cómo integrar CKEDITOR un editor WYSIWYG para poder ingresar contenido HTML fácilmente, también implementaremos el plugin select2 para la selección de etiquetas.
En esta lección vemos finalmente cómo guardar la publicación en la base de datos, incluida la relación con las etiquetas que se guarda en una tabla aparte.
En esta lección validamos los campos del formulario, mostramos los mensajes de error de validación y hacemos que los campos que pasan la validación permanezcan con la información que ingresó el usuario, y de esa forma evitar que se tenga que volver a ingresar la información.
En esta lección agregamos restricciones para que únicamente se muestren los posts públicos, y utilizamos query scopes locales para que nuestro código sea más limpio y reutilizable.
En esta lección implementamos la vista individual de los posts, utilizando la plantilla que descargamos en la primera lección.
En esta lección vemos cómo implementar urls amigables utilizando model bindings
En esta lección definimos el título y el descripción de nuestro sitio web dependiendo de la página en la que estemos, con el fin de controlar el contenido que se muestra en los buscadores.
En esta lección generamos los links para compartir las publicaciones en redes sociales.
En esta lección vemos un enfoque diferente en la forma en la que se crean y actualizan recursos convencionalmente. Solo tendremos una vista para actualizar y una ventana flotante para crear posts con la mínima cantidad de datos necesarios.
En esta lección terminamos la funcionalidad para crear y actualizar publicaciones.
En esta lección vemos cómo subir imágenes con DropzoneJS, una librería de Javascript que nos permite arrastrar y soltar archivos, subir múltiples archivos a la vez, validación, entre otras funcionalidades.
En esta lección nos aseguramos de que los archivos que se suban sean de tipo imagen y que no pesen más de 2mb. Hacemos la validación del lado del cliente con DropzoneJS y también validamos del lado del servidor.
En esta lección vemos cómo guardar las imágenes en el servidor de una forma muy sencilla. También vemos cómo configurar el sistema de archivos que viene con Laravel.
En esta lección implementamos una galería de imágenes utilizando el carousel de twitter bootstrap.
En esta lección agregamos la funcionalidad par que el usuario pueda eliminar las fotos de las publicaciones.
En esta lección actualizamos nuestra aplicación de Laravel 5.4 a Laravel 5.5. siguiendo las instrucciones de la documentación. En el proceso actualizamos composer y el instalador de Laravel.
En esta lección veremos cómo mantener el modal de creación de un post abierto en caso de haber errores de validación. Ya que actualmente, el modal desaparece cuando falla la validación.
En esta lección vemos cómo permitir que se creen publicaciones con el mismo título pero que la url sea única para poderla diferenciar. En el proceso vemos varias formas de hacerlo, sus pros y sus contras.
En esta lección activamos los links de navegación basándonos en la ruta actual, en lugar de la url como lo hicimos con la administración. También creamos un archivo de 'helpers' para almacenar este tipo de lógicas reutilizables.
En esta lección agregamos rápidamente las páginas estáticas del blog, y arreglamos unos links y unos estilos que no están funcionando.
En esta lección permitimos a los administradores revisar los posts no públicos para que puedan ser revisados antes de su publicación. También personalizamos la página de error 404, que aparece cuando un usuario intenta acceder a una página que no existe.
En esta lección definimos las relaciones entre los posts y los usuarios con el fin de saber qué usuario publicó tal post. Un usuario podrá tener muchos posts asociados y un post solo podrá pertenecer a un usuario.
En esta lección reestructuramos un poco las vistas para simplificar su contenido y poder leerlas más fácilmente en el futuro. Utilizamos polimorfismo para incluir dinámicamente la vista adecuada según el tipo de post, que puede ser de tipo texto, de tipo imagen, de tipo galería o de tipo video/audio.
En esta lección vamos a restringir el acceso a las publicaciones desde la administración. Los usuarios autenticados, solamente podrán ver las publicaciones que ellos han creado y no las publicaciones de otros.
En esta lección instalamos el paquete spatie/laravel-permission que nos ayuda con el manejo de roles y permisos en nuestras aplicaciones de Laravel.
En esta lección agregamos los roles de administrador y escritor en la base de datos y los asignamos a los 2 usuarios existentes. Luego modificamos las políticas de acceso para que el administrador pueda realizar todas las acciones.
En esta lección agregamos los permisos para ver, crear, actualizar y eliminar todos las publicaciones, de esta manera tenemos más flexibilidad al momento de asignar permisos a usuarios.
En esta lección creamos una sección en la administración para ver todos los usuarios del blog con sus respectivos roles.
En esta lección creamos una sección para mostrar el perfil de usuario con sus modelos relacionados, es decir, sus publicaciones, sus roles y permisos adicionales.
En esta lección creamos el formulario para editar usuarios y agregamos la validación para impedir que existan correos electrónicos repetidos en la base de datos.
En esta lección agregamos dinámicamente las reglas de validación para la contraseña para permitir que el usuario pueda cambiarla cuando lo necesite.
En esta lección agregamos el formulario para seleccionar y deseleccionar roles de un usuario específico con la ayuda del paquete laravel-permission
En esta lección permitimos agregar y quitar permisos a usuarios desde la administración. También permitimos que se puedan quitar todos los roles y todos los permisos al usuario.
En esta lección mostramos los permisos asociados a los roles al momento de asignarlos al usuario, agregamos los links de navegación para el manejo de usuarios y activamos las rutas anidadas utilizando el helper que creamos varias lecciones atrás.
En esta lección validamos el formulario, generamos la contraseña, creamos el usuario, le asignamos los roles y permisos y regresamos una respuesta exitosa al usuario.
En esta lección revisamos cómo funcionan los eventos y listeners en Laravel y cómo nos puede ayudar a organizar mejor nuestras aplicaciones.
Ahora que ya tenemos el evento en su lugar, vamos a crear el mailable y la vista markdown con las credenciales de acceso que enviaremos al usuario recién creado.
En esta lección implementamos la eliminación de usuarios y discutimos las restricciones en base de datos (db constraints) y el evento deleting de Eloquent.
En esta lección restringimos la habilidad de asignar y quitar roles y permisos utilizando los middlewares que trae el paquete laravel-permission. Hacemos uso también de las directivas de blade de este paquete.
En esta lección creamos el formulario para editar roles, es decir, que podamos cambiarle el nombre y asignar o quitar permisos.
En esta lección terminamos el formulario para editar roles y agregamos un campo adicional a los roles y permisos para poder asignar un nombre más descriptivo que podamos mostrar en la interfaz web.
En esta lección personalizamos los mensajes que aparecen cuando ocurre un error de validación al intentar crear un y actualizar un role, utilizando un form request.
En esta lección permitimos que el usuario pueda eliminar roles, menos el role 'admin' ya que nos dejaría sin los permisos principales de nuestra aplicación. Por esta razón el role 'admin' no se podrá eliminar desde el panel de administración.
En esta lección creamos las políticas de acceso a los roles para que solamente los administradores y/o los usuarios con los permisos correctos puedan crear y modificar roles.
En esta lección implementamos la funcionalidad para ver y editar permisos solamente, y veremos cómo crear permisos desde la terminal.
En esta lección implementamos las políticas de acceso a los permisos, para que solo los usuarios con los permisos correctos puedan ver y actualizar permisos.
En esta lección mostramos y ocultamos botones y links de navegación según los permisos que tenga el usuario actualmente autenticado.
En esta lección hacemos que el contenido de la página archivo refleje la información que tenemos en la base de datos. Mostramos algunos escritores, categorías y las últimas publicaciones.
En esta lección agrupamos las publicaciones según el més y el año en el que fueron creadas; también mostramos la cantidad de publicaciones creadas en cada mes.
En esta lección mostramos los posts según su fecha de publicación y permitimos paginar estos resultados. También traducimos al español las fechas que nos devuelve la base de datos.
En esta lección veremos cómo optimizar las consultas sql que realizamos a través de Eloquent; para ello vamos a instalar un paquete llamado Laravel Debugbar que nos permite, además de otras cosas, inspeccionar las consultas realizadas en nuestras aplicaciones.
En esta lección vamos a instalar las dependencias necesarias de javascript necesarias para nuestro SPA con Vue.js.
Una vez que tenemos instaladas las dependencias NPM, necesitamos una forma de procesarlas, empaquetarlas y optimizarlas (automáticamente) para que nuestra aplicación pueda correr en un navegador fluidamente y sin problemas.
En esta lección vamos hacer que el navegador refleje los cambios inmediatamente después de hacer un cambio en la aplicación. Para ello vamos a utilizar browserSync.
En esta lección definiremos la vista inicial que cargaremos con Laravel. Luego de esta carga inicial, Vue.js y Vue Router se encargarán de la navegación.
En esta lección instalaremos Vue Router y solucionaremos un problema que nos ocurre cuando laravel-mix intenta instalar dependencias automáticamente.
En esta lección veremos cómo funcionan las rutas en Vue Router, y definimos las rutas que necesitamos para nuestra aplicación.
En esta lección definimos la navegación de nuestro SPA y vemos cómo activar y desactivar links dependiendo de la página en la que estemos.
En esta lección crearemos componentes de Vue.js para cada una de las vistas de nuestra aplicación.
En esta lección definimos una ruta API para obtener los posts via AJAX con AXIOS, y así poder mostrarlos en la vista Home.vue
En esta lección mostramos la categoría, las etiquetas, el usuario de cada publicación. Utilizamos "accesores" de Eloquent para formatear la fecha de publicación.
En esta lección le damos nombre a las rutas al igual que lo hacemos en Laravel y definimos una vista 404 para las rutas no definidas.
En esta lección veremos cómo pasar y recibir parámetros a través de las rutas de Vue Router y creamos la ruta API en Laravel para que nos devuelva publicaciones individuales.
En esta lección modificamos la respuesta del post individual para que nos devuelva también sus relaciones. También vemos brevemente qué son y cómo utilizar API Resources de Eloquent en Laravel.
En esta lección extraemos la cabecera de los posts para poder reutilizarlo y organizar mejor nuestra aplicación, y extraemos también la navegación del sitio.
En esta lección implementaremos la vista para mostrar solamente los posts que pertenecen a cierta categoría.
En esta lección implementamos la vista para mostrar las publicaciones filtradas por etiquetas.
Actualmente en la vista Home CategoryPosts y TagsPosts, tenemos prácticamente el mismo contenido en cuanto al template, así que vamos a extraer todo este contenido a un componente dedicado para listar las publicaciones.
En esta lección permitimos que los parámetros de las rutas sean enviados automáticamente como propiedades a los componentes, y de esa forma quitar la dependencia del router dentro de las vistas. También solucionamos un problema de renderización con la vista TagsPosts.
En esta lección implementamos la página de archivo y extraemos los links de categorías y publicaciones para poder reutilizarlos fácilmente.
En esta lección creamos un componente dedicado para mostrar los comentarios de Disqus en la página individual de las publicaciones.
En esta lección vamos a implementar la paginación posts con Vue Router utilizando la información de paginación que nos devuelve Laravel desde la API.
En esta lección vamos a extraer la paginación que creamos en la lección anterior, para poder reutilizarla en la vista de categorías y etiquetas.
En esta lección veremos cómo utilizar efectos de transición en Vue.js, y lo utilizaremos para cambiar de páginas. También veremos cómo utilizar las animaciones la librería Animate.css con Vue.js.
En esta rápida lección creamos un componente que encapsule los botones de compartir las publicaciones en redes sociales.
En esta lección implementaremos el formulario de contacto para que envíe la información del usuario vía AJAX y utilizamos las transiciones de Vue.js
En esta lección vamos a quitar el hash de las urls de nuestro SPA para utilizar el modo historial. Veremos también cómo corregir algunos errores en Laravel causados por este cambio.
En esta lección instalamos Laravel Valet, un servidor
SECCIÓN 1 - Integración de las plantillas html y esquema de base de datos
INTEGRANDO LA PLANTILLA HTML
CREANDO LA TABLA POSTS
MOSTRANDO LOS POSTS DESDE LA BASE DE DATOS
MOSTRANDO LA FECHA DE PUBLICACIÓN DE LOS POSTS
CREANDO LAS CATEGORÍAS
QUÉ SON Y CÓMO UTILIZAR SEEDERS
CREANDO LAS ETIQUETAS
INTEGRANDO LA PLANTILLA DE ADMINISTRACIÓN ADMINLTE
INTEGRANDO EL LOGIN - PARTE I
INTEGRANDO EL LOGIN - PARTE II
PERSONALIZANDO EL MENÚ Y UTILIZANDO CONTROLADORES
MOSTRANDO LOS POSTS CON DATATABLESJS
REESTRUCTURACIÓN DE CÓDIGO Y ACTIVACIÓN DE LINKS
SECCIÓN 2 - Crear y editar publicaciones
CREACIÓN DEL FORMULARIO PARA INGRESAR POSTS
IMPLEMENTACIÓN DE UN SELECTOR DE FECHAS 'DATEPICKER'
INTEGRANDO UN EDITOR DE CONTENIDO Y UN SELECTOR MÚLTIPLE
GUARDANDO LAS PUBLICACIONES
VALIDANDO EL FORMULARIO
QUERY SCOPES
MOSTRANDO LOS POSTS INDIVIDUALES
URLS AMIGABLES
TÍTULO Y DESCRIPCIÓN PARA SEO
SOCIAL LINKS
ACTUALIZAR POSTS - PARTE 1
ACTUALIZANDO POSTS - PARTE 2
SECCIÓN 3 - Cómo subir imágenes
CÓMO SUBIR IMÁGENES CON DROPZONEJS
VALIDANDO LAS IMÁGENES
ALMACENANDO LAS IMÁGENES EN EL SERVIDOR
MOSTRANDO LAS FOTOS
GALERÍA DE FOTOS
ELIMINANDO FOTOS | PARTE 1
ELIMINANDO FOTOS | PARTE 2
SECCIÓN 4 - Filtros y mejoras en el código (reestructuraciones)
POSTS CON VIDEO Y AUDIO
PAGINACIÓN PERSONALIZADA
FILTRAR POSTS POR CATEGORÍA
FILTRAR POSTS POR ETIQUETA
ACCESORES Y MUTADORES DE ELOQUENT
CREANDO ETIQUETAS SOBRE LA MARCHA
REESTRUCTURACIÓN DEL POSTSCONTROLLER
REESTRUCTURACIÓN DEL PHOTOSCONTROLLER
ELIMINAR POSTS Y SUS RELACIONES
ACTUALIZANDO A LARAVEL 5.5
MANTENER EL MODAL SI HAY ERRORES
URLS ÚNICAS
ACTIVANDO LA NAVEGACIÓN
AGREGANDO LAS PÁGINAS ESTÁTICAS
SECCIÓN 5: Roles y permisos
ACCESO A POSTS NO PÚBLICOS
ASIGNAR POSTS A USUARIOS
Reestructuración VISTAS POLIMÓRFICAS
POLÍTICAS DE ACCESO A PUBLICACIONES
Instalación del paquete laravel-permission (Vista previa)
Roles y Usuarios
Permisos de usuario
Mostrando el listado de usuarios
Creando el perfil de usuario
Editar usuarios
Editar contraseña
Agregar y quitar roles de usuario
Agregar y quitar permisos de usuario
Activando rutas anidadas
Crear usuarios - parte 1
Crear usuarios - parte 2
Eventos y Listeners
Enviar credenciales por correo electrónico
Políticas de acceso a usuarios
Eliminar usuarios
Permisos para asignar roles
Mostrando el listado de roles
Formulario para crear roles
Formulario para editar roles - parte 1
Formulario para editar roles - parte 2
Mensajes de validación personalizados
Eliminar roles
Políticas de acceso a roles
Ver y editar permisos
Políticas de acceso a permisos
Mostrar y ocultar botones
Implementando la página de archivo
Agrupar posts por mes y año
Filtrar posts por mes y año
Optimización de consultas en Eloquent
SECCIÓN 6: Convirtiendo el Blog en un SPA con Vue.js
Instalación de dependencias NPM (Vista previa)
Compilación de archivos (Vista previa)
Configurando BrowserSync (Vista previa)
Definiendo la vista principal
Instalando Vue Router
Creando las rutas
Definiendo la navegación
Creando las vistas
Mostrando los posts via AJAX
Mostrando los posts - parte 2
Rutas con nombre
Mostrando posts individuales
Uso de API Resources en Laravel
Extracción de componentes
Mostrando posts por categorías
Mostrar posts por etiquetas
Componentes para los posts
Parámetros a propiedades
Implementando la vista archivo
Agregando los comentarios
Paginación con Vue Router
Cómo autenticar un SPA (Vue.js) utilizando Laravel Airlock
SECCIÓN 7: Cómo Autenticar un SPA via API con Laravel Sanctum
Autenticación de un SPA (Vue.js) con Laravel Sanctum
Autenticación de un SPA (Vue.js) con Laravel Sanctum | Parte 2
Cómo utilizar Vuex para guardar el estado del usuario autenticado desde Laravel
Cómo utilizar Vuex para guardar el estado del usuario autenticado desde Laravel | Parte 2