En esta página:
En la Parte anterior llamada Como Crear un Sistema de Notificaciones (Frontend) con Laravel 8 y MySQL – Parte 2 creamos la migración para la tabla que almacenará las notificaciones y definimos los campos para esta tabla, asimismo ejecutamos la migración para que se cree la tabla con los campos en la base de datos, en este tercera parte vamos a continuar con la creación de nuestro sistema de notificaciones, vamos con ello.
Partes
Antes de continuar, te invito a leer los siguientes artículos:
- Que es Laravel + Tu Primera Aplicación con Laravel
- Como Usar Mongo DB en Laravel 8 + Listado de Datos – Parte 1
- Las Novedades más destacadas que trae Laravel 8
- Las Novedades más destacadas que trae Laravel 7
- 6 Helpers de gran Utilidad en Laravel 7
- Como crear un CRUD con Galería de Imágenes en Laravel 6.2 y Bootstrap 4 – Parte 1
- Como Trabajar con Query Scopes (Ámbitos de Consulta) en Laravel 7
- Lee más artículos en la categoría Laravel
Asimismo te invito a escuchar el Podcast: “¿ Que Hago Si No Tengo Los Recursos Para Dedicarme A La Programación ?”:
Spotify: | Sound Cloud: | Apple Podcasts |
Bien ahora continuemos con el Post: Como Crear un Sistema de Notificaciones (Frontend) con Laravel 8 y MySQL – Parte 3.
En la Parte 2 de este tutorial creamos la tabla llamada notifications mediante un comando nativo de Laravel, yo podría optar por crear una tabla personalizada, pero voy a usar esa tabla ya que me creo los campos rápidamente y pienso que no hay nada mejor que usar algo nativo de Laravel porque suele funcionar en la mayoría de casos de manera optima.
Guardando Notificaciones en la Base de Datos
En la Parte 1 de este tutorial creamos 2 tablas una llamada jugos y otra llamada postres, la idea es que cuando se agrega un nuevo producto en cualquiera de esas 2 tablas, pues el sistema nos debe mostrar una notificación con el mensaje “Se agrego un nuevo Producto”, tu le puedes poner el mensaje que desees, yo para este tutorial haré que muestre ese mensaje.
Antes que todo voy a verificar si podemos guardar datos en la tabla notificacions que es en donde se almacenarán las notificaciones. Para poder procesar las notificaciones y guardarlas, necesitamos crear una Notificación, le pondré de NotificarCambios y lo creo ejecutando el siguiente comando.
1 2 3 4 5 6 |
// Comando para Crear una Notificación en Laravel 8 php artisan make:notification NotificarCambios Notification created successfully. |
Luego de ejecutar el comando anterior, se me ha creado un archivo llamado NotificarCambios.php en app > Notifications > NotificarCambios.php
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
/sistema-notificaciones-eventos-mysql-bd ├── /app ├── /Console ├── /Exceptions ├── /Http ├── /Listeners ├── /Models ├── /Notifications ├── NotificarCambios.php // Se ha Creado este Archivo ├── /Providers ├── /bootstrap ├── /config ├── /database ├── /public ├── /resources ├── /routes ├── /storage ├── /tests ├── /vendor ├── .editorconfig ├── .env ├── .env.example ├── .styleci.yml ├── artisan ├── composer.json ├── composer.lock ├── package.json ├── phpunit.xml ├── server.php ├── webpack.mix.js |
Abro el archivo NotificarCambios.php y dentro de el empiezo creando una variable privada con el nombre $notificacion, tu le puedes poner el nombre que desees.
Luego en la función __construct() le paso como argumento la variable $notificacion, en el método vía() le digo que usaré una base de datos entonces le dejo como return [‘database’].
Y Por último dentro del método toArray() defino los valores que quiero guardar en la columna data de la tabla notifications en la base de datos, los valores que quiero guardar son titulo y contenido, estos se almacenaran como un array que luego podemos manipularlo según lo deseado. Tu puedes almacenar los valores que desees no hay problema.
El archivo NotificarCambios.php se debería ver de la siguiente manera con los cambios mencionados.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 |
<?php namespace App\Notifications; use Illuminate\Bus\Queueable; use Illuminate\Contracts\Queue\ShouldQueue; use Illuminate\Notifications\Messages\MailMessage; use Illuminate\Notifications\Notification; class NotificarCambios extends Notification { use Queueable; private $notificacion; /** * Create a new notification instance. * * @return void */ public function __construct($notificacion) { $this->notificacion = $notificacion; } /** * Get the notification's delivery channels. * * @param mixed $notifiable * @return array */ public function via($notifiable) { return ['database']; } /** * Get the mail representation of the notification. * * @param mixed $notifiable * @return \Illuminate\Notifications\Messages\MailMessage */ public function toMail($notifiable) { // } /** * Get the array representation of the notification. * * @param mixed $notifiable * @return array */ public function toArray($notifiable) { return [ 'titulo' => $this->notificacion['titulo'], 'contenido' => $this->notificacion['contenido'] ]; } } |
Ahora voy a crear una ruta y un controlador, primero crearé la ruta que apuntará al controlador, para esto abro el archivo web.php que se encuentra en routes > web.php
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
/sistema-notificaciones-eventos-mysql-bd ├── /app ├── /bootstrap ├── /config ├── /database ├── /public ├── /resources ├── /routes ├── api.php ├── channels.php ├── console.php ├── web.php // Abro este Archivo ├── /storage ├── /tests ├── /vendor ├── .editorconfig ├── .env ├── .env.example ├── .styleci.yml ├── artisan ├── composer.json ├── composer.lock ├── package.json ├── phpunit.xml ├── server.php ├── webpack.mix.js |
Dentro del archivo web.php agrego la ruta /notificar, tu le puedes poner la ruta que desees, no hay problema. Cuando escribimos esta ruta en el navegador, este llamará al controlador llamado TestController.php que crearemos mas abajo. Dentro de este controlador crearemos un método llamado enviarNotificacion() que procesará la notificación.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
<?php use Illuminate\Support\Facades\Route; use App\Http\Controllers\TareasController; /* |-------------------------------------------------------------------------- | Web Routes |-------------------------------------------------------------------------- | | Here is where you can register web routes for your application. These | routes are loaded by the RouteServiceProvider within a group which | contains the "web" middleware group. Now create something great! | */ Route::get('/', function () { return view('welcome'); }); Auth::routes(); Route::get('/home', [App\Http\Controllers\HomeController::class, 'index'])->name('home'); // Ruta de Prueba de las Notificaciones Route::get('/notificar', [TestController::class, 'enviarNotificacion']); |
Bueno ahora crearé el controlador TestController.php, tu le puedes poner el nombre que desees, no hay problema. Para crear este controlador ejecuto el siguiente comando.
1 2 3 4 5 6 |
// Comando para crear el controlador 'TestController' php artisan make:controller TestController Controller created successfully. |
Luego de ejecutar el comando anterior se me ha creado el archivo TestController.php en app > Http > Controllers > TestController.php
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 |
/sistema-notificaciones-eventos-mysql-bd ├── /app ├── /Console ├── /Exceptions ├── /Http ├── /Controllers ├── /Auth ├── Controller.php ├── HomeController.php ├── TestController.php // Se ha Creado este Archivo ├── /Middleware ├── Kernel.php ├── /Listeners ├── /Models ├── /Notifications ├── /Providers ├── /bootstrap ├── /config ├── /database ├── /public ├── /resources ├── /routes ├── /storage ├── /tests ├── /vendor ├── .editorconfig ├── .env ├── .env.example ├── .styleci.yml ├── artisan ├── composer.json ├── composer.lock ├── package.json ├── phpunit.xml ├── server.php ├── webpack.mix.js |
Abro el archivo TestController.php y antes de la clase principal importo el modelo User, el trait Notification y el archivo de notificación que creamos al inicio de este Post, es decir NotificarCambios.
Luego creo el método enviarNotificacion() y dentro de creo una variable con el nombre $esquema, dentro de ella llamo a todos los usuarios, luego creo una variable con el nombre $notificacion, dentro de ella armo el cuerpo de la notificación con los valores que serán insertados en la columna data de la tabla notifications.
Luego paso Notification::send en donde paso la variable $esquema, asimismo creamos una nueva notificación mediante new NotificarCambios y le pasamos la variable $notificacion.
Ya que este controlador es para probar y verificar si se pueden guardar notificaciones en la tabla notifications, mostraré un mensaje que diga Tarea Realizada ! cada ves que una notificación es almacenada.
Con los cambios mencionados, el archivo TestController.php se debe ver de la siguiente manera.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
<?php namespace App\Http\Controllers; use Illuminate\Http\Request; use App\Models\User; use Notification; use App\Notifications\NotificarCambios; class TestController extends Controller { public function enviarNotificacion() { $esquema = User::all(); $notificacion = [ 'titulo' => 'Se agrego un nuevo Producto', 'contenido' => 'Pie de Manzana' ]; Notification::send($esquema, new NotificarCambios($notificacion)); dd('Tarea Realizada !'); } } |
Entonces si arranco el servidor con el siguiente comando.
1 2 3 4 5 6 |
// Comando para iniciar el servidor local en Laravel 8 php artisan serve Starting Laravel development server: http://127.0.0.1:8000 |
Y abro la ruta http://localhost:8000/notificar en mi navegador, debería de ver un mensaje que dice Tarea Realizada !
Y si voy a phpMyAdmin, puedo ver que se ha insertado una notificación en la tabla notifications, puedes ver en la columna data se ha guardado los valores titulo y contenido en formato JSON.
Los datos de las demás columnas fueron creados automáticamente por Laravel, nosotros solo debemos usar todos los datos que se almacenan en la columna data, al menos para este tutorial, ya que los datos de las demás columnas si pueden ser usados, pero para otras lógicas de aplicaciones.
Bueno hasta aquí llegamos con este Post, en donde creamos nuestro archivo de notificación NotificarCambios.php, luego creamos una ruta y un controlador para gestionar nuestra prueba de notificaciones.
Ten Paciencia, lo que quiero es que conozcas bien como se crea este proyecto y no llenarte el capitulo de mucho contenido porque te puedes marear y no tendrás un óptimo aprendizaje.
Nota (s)
- En la siguiente parte vamos a crear las vistas de administración para los jugos y postres.
- No olvides que debemos usar la Tecnología para hacer cosas Buenas por el Mundo.
Síguenos en nuestras Redes Sociales para que no te pierdas nuestros próximos contenidos.