draw / post-office-bundle
Requires
- php: ^7.3
- symfony/css-selector: ^4.4 || ^5.4
- symfony/dom-crawler: ^4.4 || ^5.4
- symfony/framework-bundle: ^4.4 || ^5.4
- symfony/mailer: ^4.4 || ^5.4
- symfony/translation: ^4.4 || ^5.4
Requires (Dev)
- draw/tester: ^0.7.59
- phpunit/phpunit: ^8.0 || ^9.0
- dev-master / 0.8.x-dev
- 0.7.59
- 0.7.58
- 0.7.57
- 0.7.56
- 0.7.54
- 0.7.53
- v0.7.52
- v0.7.51
- v0.7.50
- v0.7.49
- v0.7.48
- v0.7.47
- v0.7.46
- v0.7.45
- v0.7.44
- v0.7.43
- v0.7.42
- v0.7.41
- v0.7.40
- v0.7.39
- v0.7.38
- v0.7.37
- v0.7.36
- v0.7.35
- v0.7.34
- v0.7.33
- v0.7.32
- v0.7.31
- v0.7.30
- v0.7.29
- v0.7.28
- v0.7.27
- v0.7.26
- v0.7.25
- v0.7.24
- v0.7.23
- v0.7.22
- 0.7.21
- v0.7.20
- v0.7.19
- v0.7.18
- v0.7.17
- v0.7.16
- v0.7.15
- v0.7.14
- v0.7.13
- v0.7.12
- v0.7.11
- v0.7.10
- v0.7.9
- v0.7.8
- v0.7.7
- v0.7.6
- v0.7.5
- v0.7.4
- v0.7.3
- v0.7.2
- v0.7.1
- v0.7.0
- v0.6.0
- v0.5.23
- 0.5.22
- v0.5.21
- v0.5.20
- v0.5.19
- v0.5.18
- v0.5.17
- v0.5.16
- v0.5.15
- v0.5.14
- v0.5.13
- v0.5.12
- v0.5.11
- v0.5.10
- v0.5.9
- v0.5.8
- 0.5.7
- 0.5.6
- 0.5.5
- 0.5.4
- 0.5.3
- 0.5.2
- 0.5.1
- 0.5.0
- dev-packages-git-actions
This package is auto-updated.
Last update: 2024-09-06 23:05:52 UTC
README
由于 Symfony/Mailer 尚未完成,某些行为可能在后续版本中受到影响,因此请将此包视为实验性的。
此包允许将电子邮件的创建委托给一个特定的类。
它还允许配置默认的 from。
配置
draw_post_office:
default_from: 'support@example.com'
您不是直接在控制器中构建电子邮件,而是创建一个继承自 Symfony\Component\Mime\Email 的类,并为它创建一个 "writer"。
实现 Draw\Bundle\PostOfficeBundle\Email\EmailWriterInterface 的任何服务都将注册为 writer。 getForEmails 必须返回一个映射,其中方法作为键,优先级作为值,以将方法注册为 writer(如果您返回方法作为值,它将考虑其优先级为 0)。系统将检测电子邮件是否与方法的第一个参数的类匹配,并在需要时调用它。
邮局声明了一个监听器来监听 Symfony\Component\Mailer\Event\MessageEvent,以便将其挂钩到 symfony 邮件器。
按照惯例,建议创建一个 Email 文件夹,在其中创建所有电子邮件类,以及实现 Draw\Bundle\PostOfficeBundle\Email\EmailWriterInterface 的 writer 类。
示例
让我们创建一个忘记密码的电子邮件,该类将包含 最小 信息以构建电子邮件,在这种情况下是触发忘记密码电子邮件流程的用户电子邮件。
<?php namespace App\Email; use Symfony\Bridge\Twig\Mime\TemplatedEmail; class ForgotPasswordEmail extends TemplatedEmail { private $emailAddress; public function __construct(string $emailAddress) { $this->emailAddress = $emailAddress; parent::__construct(); } /** * The email address of the person who forgot is email */ public function getEmailAddress(): string { return $this->emailAddress; } }
我们必须为电子邮件创建一个 writer
<?php namespace App\Email; use App\Email\ForgotPasswordEmail; use App\LostPasswordTokenProvider; use Draw\Bundle\PostOfficeBundle\Email\EmailWriterInterface; class ForgotPasswordEmailWriter implements EmailWriterInterface { private $lostPasswordTokenProvider; public function __construct(LostPasswordTokenProvider $lostPasswordTokenProvider) { $this->lostPasswordTokenProvider = $lostPasswordTokenProvider; } public static function getForEmails(): array { return ['compose']; // Or ['compose' => 0]; } public function compose(ForgotPasswordEmail $forgotPasswordEmail) { $emailAddress = $forgotPasswordEmail->getEmailAddress(); $forgotPasswordEmail ->to($emailAddress) ->subject('You have forgotten your password !') ->htmlTemplate('emails/forgot_password.html.twig') ->context([ 'token' => $this->lostPasswordTokenProvider->generateToken($emailAddress) ]); } }
基本控制器示例
<?php namespace App\Controller; use App\Email\ForgotPasswordEmail; use Symfony\Component\Mailer\MailerInterface; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Response; use Symfony\Component\HttpFoundation\RedirectResponse; class ForgotPasswordController { public function forgotPasswordAction( Request $request, MailerInterface $mailer ): Response { if ($request->getMethod() == Request::METHOD_GET) { return $this->render('users/forgot_password.html.twig'); } // ... You should have a logic to validate there is a user and send a different email ... / $mailer->send(new ForgotPasswordEmail($request->request->get('email'))); return new RedirectResponse($this->generateUrl('check_email')); } }
这样,您可以保持控制器干净,并按结构编写和覆盖电子邮件。
系统还会将 Envelope 参数作为第二个参数传递,以防您需要它。
如果您查看 Draw\Bundle\PostOfficeBundle\Email\DefaultFromEmailWriter,您将看到如何创建一个在发送所有电子邮件时都会调用的 writer。