Automatización de Tareas en Laravel

Aprende a crear una tarea en Laravel con envío de correo incluido, y deja la tarea programada de forma permanente en tu servidor.

Programa una tarea en Laravel

Laravel ofrece una herramienta poderosa llamada Task Scheduling que permite automatizar tareas dentro de tus proyectos. En este tutorial aprenderas sobre automatización de tareas en Laravel. Además de como enviar correos electrónicos diarios, en tres pasos esenciales. Adelante!!

CREACIÓN COMANDO

Paso 1: Crear el comando

Para la automatización de tareas en Laravel, lo que primero que necesitamos es crear un comando. Para eso iremos a la terminal y ejecutaremos la siguiente instrucción para crear nuestro comando de Laravel:

php artisan make:command RegisteredVisits --command=regi

El comando anterior creará una clase llamada RegisteredVisits en un archivo con el mismo nombre en la carpeta app/Console/Commands. Al ejecutar el comando Artisan, también le hemos dado un nombre al comando que ejecutará la tarea. 

Paso 2: Modificamos el archivo creado

Entramos al archivo que hemos creado en la ruta «app/Console/Commands/RegisteredVisits.php» y modificamos la descripción del comando:

     /**
     * The console command description.
     *
     * @var string
     */
    protected $description = ‘Envía un correo con las visitas diaria del blog’;

Paso 3: Registramos el comando

Accedemos al archivo «app/Console/Kernel.php» y registramos nuestro archivo:

     /**
     * The Artisan commands provided by your application.
     *
     * @var array
     */
    protected $commands = [

        ‘App\Console\Commands\RegisteredVisits’,

    ];

Si ejecutamos el comando «php artisan list» desde la terminal, deberíamos poder ver el comando registrado en el listado, más en concreto en registered.

Paso 4: Creamos el código

Dentro del archivo RegisteredVisits, creamos la consulta que nos dará las visitas diarias.

    /**
      * Execute the console command.
     *
     * @return mixed
     */

    public function handle()
    {

        $date_now = now()->format(‘Y-m-d’);

        $visits = \DB::table(‘logs’)->whereDate(‘created_at’,$date_now)->get();
    }

 

CONFIGURACIÓN MAIL

Paso 1: Crear clase Mailable para el envío de email

php artisan make:mail SendMail

Esto creará el archivo dentro de app/Mail/SendMail.php .

Class SendMail extends Mailable
{

    use Queueable, SerializesModels;

    public $visits;

    /**
    * Create a new message instance.
     *
     * @return void
     */

    public function __construct($visits)
    {
        $this->visits = $visits;
    }

    /**
     * Build the message.
     *
     * @return $this
     */

    public function build()
    {
      return $this->view(‘mails.daily-visits’);

    }

}

Dentro del archivo, creamos una propiedad $visits, y la inicializamos en el constructor con el parámetro $visits que pasamos al instanciar la clase SandMail. Por último, enviamos los datos desde el método build a la vista.

En mi caso,  yo dentro de  resources\views tengo creada una carpeta mails, y ahí dentro voy creando las plantillas de correo que voy generando. En este caso la ruta sería :

resources\views\mails\daily-visits.blade.php 

Paso 2: Configurar el contenido del correo

En este caso, como es un reporte propio solo voy a incluir un titulo, un par de párrafos y una tabla


<h1><strong> Reporte díario con la visita del blog </strong> </h1>

<p>Hoy, {{now()->format(‘d-m-Y’)}} se han registrado un total de {{count($visits)}} visitas en la web.</p>

<p>Las páginas visitas han sido:</p>

<div>

    <table>

        <tr class=«bg-indigo-400 bg-opacity-100 text-white»>

                <th class=«text-left»>Página</th>

                <th class=«text-left»>Fecha</th>

        </tr>

        <tbody>

            @forelse ($visits as $visit)

                <tr class=«border-b-2»>

                    <td>  {{$visit->page}}   </td>

                    <td>  {{$visit->created_at}}   </td>

                </tr>

            @endforeach

        </tbody>

    </table>

</div>

Paso 3: Registramos el mail

Accedemos al fichero «app/Console/Commands/RegisteredVisits.php» y agregamos la clase  

use Illuminate\Support\Facades\Mail;
use App\Mail\SendMail;

Y en el método handler lo completamos así:

  /**
     * Execute the console command.
     *
     * @return mixed
     */

    public function handle()
    {

        $date_now = now()->format(‘Y-m-d’);

        $visits = \DB::table(‘logs’)->whereDate(‘created_at’,$date_now)->get();

       

        Mail::to(‘blognotasdesarrolloweb@gmail.com’)->send(new SendMail($visits));

    }

 

PROGRAMACIÓN DEL COMANDO

Como la tarea la ejecutaremos una  vez al día, usaremos el método «daily()». Para eso debemos registrarlo en el archivo «app/Console/Kernel.php»  dentro de la función schedule.

  /**
     * Define the application’s command schedule.
     *
     * @param  \Illuminate\Console\Scheduling\Schedule  $schedule
     * @return void
     */

    protected function schedule(Schedule $schedule)
    {
        $schedule->command(‘registered:visits’)->daily();

    }

Al método daily()  se ejecutará a medianoche. Si quisiéramos que se ejecutará la tarea una vez al día pero en otra hora distinta, habría que usar el método dailyAt pasándole un parámetro de tipo string, con la hora en la que queremos que se ejecute. Ejemplo:  ->dailyAt(’13:00′) .

Si quieres saber más sobre los tramos que existen, aquí te dejo el enlace a la documentación de scheduling de Laravel.

Finalmente, desde la consola de comandos de nuestro servidor, ejecutamos el siguiente comando

* * * * * cd /path-to-your-project && php artisan schedule:run >> /dev/null 2>&1

Si lo quieres probar en local (localhost), debes escribir el siguiente comando:

php artisan schedule:run

Si quieres ver si funciona en el momento, puedes cambiar el método daily por everyMinute, así podrás ver si has configurado todo el proceso correctamente. Quedando algo así:

Con estos pasos, has configurado Laravel para automatizar tareas, como enviar un reporte diario de visitas, mejorando la eficiencia de tu aplicación. Laravel Task Scheduling es una herramienta flexible que puede adaptarse a cualquier necesidad de automatización.

Nota: Recuerda configurar correctamente el crontab en tu servidor para que Laravel ejecute el scheduler como está previsto.

Si esta guía te ha sido útil, no dudes en compartirla y ayudar a otros desarrolladores a descubrir el poder de la programación de tareas en Laravel. Si te interesa más contenido relacionado con Laravel, descubre más en este enlace. Y si tienes trucos propios o quieres compartir tu experiencia con la programación de tareas en Laravel, déjanos un comentario o síguenos en nuestras redes sociales. ¡Juntos podemos construir aplicaciones más inteligentes y eficientes! 😉 👍


Suscríbete a nuestra Newsletter

Mantente al día con nuestras últimas novedades y accede a recursos gratuitos exclusivos.
* indicates required

2 comentarios

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *