O Facade Design Pattern é um padrão estrutural que fornece uma interface simplificada para um conjunto complexo de classes, bibliotecas ou subsistemas. É usado para ocultar a complexidade dos sistemas e oferecer uma interface mais amigável e fácil de usar para os clientes.
Situação:
Imagine que temos um aplicativo que precisa enviar e-mails de forma simples. O processo de envio de e-mails pode envolver configurações de autenticação, servidores SMTP, configuração de remetente, destinatário, corpo do e-mail, anexos, etc. Em vez de expor todo esse processo complexo ao usuário final, podemos criar uma fachada para encapsular essas operações.
Instale o PHPMailer via Composer
composer require phpmailer/phpmailer
Sistema de diretório
?Facade ┣ ?src ┃ ┗ ?MailFacade.php ┣ ?vendor ┣ ?composer.json ┗ ?index.php
Carregamento automático
Primeiro, vamos ter certeza de que o Composer gerencia as dependências e carrega automaticamente as classes corretamente.
No arquivo compositor.json, podemos incluir o autoload das classes da pasta src e também adicionar a dependência do PHPMailer:
{ "require": { "phpmailer/phpmailer": "^6.0" }, "autoload": { "psr-4": { "App\\": "src/" } } }
Class MailFacade
Agora vamos criar uma classe MailFacade que atuará como fachada para simplificar o processo de envio de emails para o usuário.
namespace App; use PHPMailer\PHPMailer\PHPMailer; use PHPMailer\PHPMailer\Exception; // Facade class class MailFacade { private $mail; public function __construct() { $this->mail = new PHPMailer(true); // Create a new instance of PHPMailer $this->mail->isSMTP(); // Set up to use SMTP $this->mail->Host = 'smtp.example.com'; // Set the SMTP server $this->mail->SMTPAuth = true; // Enable SMTP authentication $this->mail->Username = '[email protected]'; // SMTP username $this->mail->Password = 'secret'; // SMTP password $this->mail->SMTPSecure = PHPMailer::ENCRYPTION_STARTTLS; // Enable TLS encryption $this->mail->Port = 587; // SMTP server port } }
Método sendEmail
// Method to send a simple email public function sendEmail($to, $subject, $body) { try { // Set sender $this->mail->setFrom('[email protected]', 'Sender Name'); // Set recipient $this->mail->addAddress($to); // You can add more with $this->mail->addAddress('[email protected]'); // Set email subject and body $this->mail->Subject = $subject; $this->mail->Body = $body; $this->mail->isHTML(true); // Set email body to accept HTML // Send email $this->mail->send(); echo 'Email successfully sent!'; } catch (Exception $e) { echo "Error sending email: {$this->mail->ErrorInfo}"; } }
Método sendEmailWithAttachment
// Method to send an email with an attachment public function sendEmailWithAttachment($to, $subject, $body, $attachmentPath) { try { // Same basic configuration as in the previous method $this->mail->setFrom('[email protected]', 'Sender Name'); $this->mail->addAddress($to); // Set subject and body $this->mail->Subject = $subject; $this->mail->Body = $body; $this->mail->isHTML(true); // Add the attachment $this->mail->addAttachment($attachmentPath); // Send the email $this->mail->send(); echo 'Email with attachment successfully sent!'; } catch (Exception $e) { echo "Error sending email: {$this->mail->ErrorInfo}"; } }
Teste
require 'vendor/autoload.php'; use App\MailFacade; // Using the Facade $mailFacade = new MailFacade(); // Sending a simple email $mailFacade->sendEmail('[email protected]', 'Email Subject', 'Email body in HTML'); // Sending an email with an attachment $mailFacade->sendEmailWithAttachment('[email protected]', 'Subject with Attachment', 'Here is your attachment', '/path/to/attachment.pdf');
Este é um exemplo prático de como o padrão Facade pode simplificar interações com bibliotecas complexas como PHPMailer.
Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.
Copyright© 2022 湘ICP备2022001581号-3