Eines de l'usuari

Eines del lloc


desplegament:laravel

Aquesta és una revisió antiga del document


Laravel

Si voleu desplegar aplicacions dins d'un contenidor, teniu una explicació a https://help.clouding.io/hc/en-us/articles/13590007627164-How-to-Deploy-Laravel-with-Docker-on-Ubuntu-22-04

Tasques periòdiques

Laravel inclou dins del seu framework un gestor de tasques periòdiques molt potent https://laravel.com/docs/11.x/scheduling, ara bé, perquè funcioni s'ha de configurar el cron del servidor seguint les indicacions de https://laravel.com/docs/11.x/scheduling#running-the-scheduler

Enviar emails amb PHPmailer

Per poder utiliztar PHPmailer, en primer cop tindrem que instal·la la dependència amb composer a Laravel de la següent manera:

composer require phpmailer/phpmailer

Després de fer la instalació de la dependencia haurem d'anar a l'arxiu api.php que està en la següent ruta:

back/elTeuNomDeProjecte/routes/api.php

Dintre d'aquest arxiu haurem de crear un endpoind e importa el controlador que hem creat per poder enviar el mail i també afegir la view perquè l'usuari pugui veure el contingut del mail.

Per crear un controlador a Laravel es fa de la següent manera:

php artisan make:controller ElNomDelTeuController

Arxiu api.php.

<?php
 
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Route;
use App\Http\Controllers\ElNomDelTeuController;
 
 
Route::post('/sendEmail',[ElNomDelTeuController::class, 'sendEmail']);
 
Route::get('/view', function () {
    return view('NomDelDirectori.NomDelBlade.blade.php', ['message' => 'Este es un mensaje dinámico']);
});

Per poder crear una view per l'email haurem d'anar a la següent ruta, farem botó dret «Nova carpeta», dintre de la nova carpeta tornarem a fer botó dret «Nou arxiu» i li posem un nom, per exemple ElMeuBlade.blade.php:

back/elTeuNomDeProjecte/resources

Les views es fan amb HTML. Un exemple d'una view:

IMPORTANT!. Tindre en compte els noms dels objectes i variables si no, sortirà un text per defecte.

<!DOCTYPE html>
<html>
<head>
    <title>{{ $subject ?? 'Example App' }}</title>
    <style>
 
        body {
            font-family: 'Arial', sans-serif;
            background-color: #F4F4F4; 
            color: #333; 
            margin: 0;
            padding: 0;
            line-height: 1.6;
        }
 
        .container {
            max-width: 600px;
            margin: 50px auto;
            padding: 20px;
            background-color: #e3e3e3; 
            border-radius: 8px; 
            box-shadow: 0px 4px 12px rgba(0, 0, 0, 0.1); 
            text-align: center;
        }
 
 
        h4 {
            font-size: 1.5rem;
            font-weight: bold;
            color: #58C4DC; 
            margin-bottom: 20px;
        }
 
 
        p {
            margin-bottom: 15px;
            color: #555; 
        }
 
 
        footer {
            margin-top: 30px;
            font-size: 0.875rem;
            color: #888;
        }
    </style>
</head>
<body>
<div class="container">
    <h4>{{ $subject ?? 'Example App' }}</h4>
    <p>Bienvenido: <strong>{{ $name ?? 'User' }} {{$lastname ?? 'User' }}</strong></p>
    <p>Pulsa en el siguiente enlace para acceder al cuestionario:</p>
    <p>
        <a href="{{ $quizUrl ?? '#' }}" style="text-decoration: none; color: #58C4DC; font-weight: bold;"
           onmouseover="this.style.textDecoration='underline'"
           onmouseout="this.style.textDecoration='none'">
            Acceder al cuestionario
        </a>
    </p>
 
    <footer>
        <p>&copy; {{ date('Y') }} Example App. Todos los derechos reservados.</p>
    </footer>
</div>
</body>
</html>

Els controladors es troben en la següent ruta:

back/elTeuNomDeProjecte/app/Http/Controllers/ElNomDelTeuController

Arxiu ElNomDelTeuController.php.

<?php
 
namespace App\Http\Controllers;
 
use Illuminate\Http\Request;
use Illuminate\Support\Facades\View;
use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\Exception;
 
class NameController extends Controller
{
    public function sendEmail(Request $request)
    {
        // Validar les dades rebudes
        $validatedData = $request->validate([
            'subject' => 'required|string',
            'message' => 'required|string',
            'to' => 'required|array',
            'to.*' => 'required|email', // Cada element hi ha que se valid 
        ]);
 
        // Configurar PHPMailer
        $mail = new PHPMailer(true);
 
        try {
            // Configuració del servidor SMTP
            $mail->isSMTP();
            $mail->CharSet = 'UTF-8';
            $mail->Host = env("MAIL_HOST");
            $mail->SMTPAuth = true;
            $mail->Username = env("MAIL_USERNAME");
            $mail->Password = env("MAIL_PASSWORD");
            $mail->SMTPSecure = PHPMailer::ENCRYPTION_STARTTLS;
            $mail->Port = 587;
 
            $mail->SMTPOptions = [
                'ssl' => [
                    'verify_peer' => false,
                    'verify_peer_name' => false,
                    'allow_self_signed' => true
                ]
            ];
 
            // Remitent
            $mail->setFrom('correu@example.com', 'Example App');
 
            // Afegir el destinatari principal (es pot deixar buit si no hi ha principal)
            $mail->addAddress('correu@example.com'); // Este puede ser tu dirección de control
 
            // Afegir cada destinatari com BCC (còpia oculta)
            foreach ($validatedData['to'] as $recipient) {
                $mail->addBCC($recipient);
            }
 
            // En cas de tindre una vista (blade) la renderitzarem perquè l'usuari el vegi la informació
            // en el correu
 
            $htmlContent = View::make('email.notification', [
                'subject' => $validatedData['subject'],
                'message' => $validatedData['message'],
            ])->render();
 
            // Contingut del correu
            $mail->isHTML(true);
            $mail->Subject = $validatedData['subject'];
            $mail->Body = $htmlContent;
 
            // Enviar el correu
            $mail->send();
 
            return response()->json([
                'message' => 'Email sent successfully'
            ]);
 
        } catch (Exception $e) {
            return response()->json([
                'error' => "Error sending email: {$mail->ErrorInfo}"
            ], 500);
        }
    }
}
/home/admin/web/eines.inspedralbes.cat/public_html/dokuwiki/data/attic/desplegament/laravel.1738702767.txt.gz · Darrera modificació: 2025/02/04 20:59 per ebota