Eines de l'usuari

Eines del lloc


desplegament:laravel

Diferències

Ací es mostren les diferències entre la revisió seleccionada i la versió actual de la pàgina.

Enllaç a la visualització de la comparació

Següent revisió
Revisió prèvia
desplegament:laravel [2025/01/10 08:25] – creat ebotadesplegament:laravel [2025/02/04 21:06] (actual) – Afegida referència a l'article de mail bàsic ebota
Línia 1: Línia 1:
 +====== 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 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 [[eines:cron]] del servidor seguint les indicacions de https://laravel.com/docs/11.x/scheduling#running-the-scheduler
 +
 +
 +====== Enviar emails dinàmics amb PHPmailer & Laravel (amb una plantilla blade)======
 +
 +<WRAP center round info 60%>
 +Si només volem enviar un mail des de codi php "simple" hi ha l'article [[hestia:correu|sobre correus]] que explica com crear un compte de correu al labs i com utilitzar-lo des de php.
 +</WRAP>
 +
 +
 +Per poder utilitzar **PHPmailer**, el primer cop haurem d'instal·lar la dependència amb **composer** de la següent manera:
 +
 +<code bash>
 +composer require phpmailer/phpmailer
 +</code>
 +
 +Després de fer la instal·lació de la dependència haurem d'anar a l'arxiu **api.php** que està en la següent ruta:
 +
 +<code bash>
 +back/elTeuNomDeProjecte/routes/api.php
 +</code>
 +
 +Dins 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:
 +
 +<code bash>
 +php artisan make:controller ElNomDelTeuController
 +</code>
 +
 +Arxiu **api.php**.
 +
 +<code 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']);
 +});
 +
 +
 +</code>
 +
 +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**:
 +
 +<code bash>
 +back/elTeuNomDeProjecte/resources
 +</code>
 +
 +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.
 +
 +<code html>
 +<!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>
 +
 +</code>
 +
 +Els controladors es troben en la següent ruta:
 +
 +<code bash>
 +back/elTeuNomDeProjecte/app/Http/Controllers/ElNomDelTeuController
 +</code>
 +
 +Arxiu ElNomDelTeuController.php.
 +
 +<code 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);
 +        }
 +    }
 +}
 +
 +
 +</code>
/home/admin/web/eines.inspedralbes.cat/public_html/dokuwiki/data/attic/desplegament/laravel.1736497540.txt.gz · Darrera modificació: 2025/01/10 08:25 per ebota