Symfony学习笔记 - Symfony Documentation - Advanced Topics

1、 Console

Symfony framework通过console可以使用很多命令来,我们也可以通过console component建立自己的命令。

  1. 可以通过属性或者yaml的方式,定义自己的命令
  2. 创建命令的文件,一般放在src\Command目录下面
  3. 在__Invoke()方法中,通过console.writeln可以在控制台输出结果

2、Sending Emails with Mailer

Symfony的Mailer组件,可以用来创建、发送邮件。接收邮件可以用php-imap来实现,需要在php.ini中,启用该扩展。

  1. 配置.env的DSN,可以通过SMTP来发送邮件
  2. 也可以通过第三方的SMTP来发送邮件
  3. 采用failover机制,一个mailer server失效,可以通过后续的mailer server发送邮件
  4. 支持通过"round-robin"的方式,按照负载均衡的方式发送邮件
  5. 支持to,cc,bcc/Message headers/Message Content/File/Images/Inline CSS/Markdown Content/S/MIME Signer/DKIM Signer/Encrypting Message/Async/Add Tags and Metadata/Draft/Event...,总之,可以利用Symfony的mailer自建一个邮件发送程序。

3、Validation

Symfony的Validation是基于JSR303 Bean Validation规范。对一个Entity进行Validation的方法包括:
1、在config/validator/validation.yaml中定义:
App\Entity\Author: properties: name: - NotBlank: ~
然后,使用Validation Service,对entity进行有效性验证。
2、validator根据约束来进行验证,约束包括:Blank、Regex、NegativeOrZero等数十种。
3、可以动态创建设置对象的验证规则。
4、前后端分离的系统,可以生成json schema,由前端生成验证规则。当收到前端的request之后,server端可以动态生成validation,进行验证。

4、消息/队列

Symfony提供一个消息总线,既可以立即发送,也可以发送到消息队列中后按规则发送。Transport需要进行配置。
1、同步传输:立即处理消息,失败抛出异常。
2、异步传输(Transport):
a、通过消息代理(如RabbitMQ, Redis)传递消息
b、需要Worker进程消费消息
c、适合生产环境
d、处理失败可重试或移入失败队列

一个完整的消息处理系统,需要:
1、编写调用 Messenger 发送消息的业务代码
2、系统自动完成消息的序列化,根据路由配置,自动选择Redis Transport,将消息推送到Redis队列
3、Worker部分,需要编写消息处理器,
4、监控部分,可以借助第三方工具,比如:Prometheus + Grafana​。也可以编写自定义的监控代码。

5、Scheduler

与消息最大的区别在与,Scheduler是按设定的频率触发的。

6、Notification

Message用于协同之间的工作协调,而Notification的目标是人类用户,支持多种呈现形式(SMS、Email、短信文本、推送通知等)

7、Serializer

1、将一种format转换成PHP对象(反序列化),或者将php对象转换成一种format(序列化)。
2、Serialize时,可以通过配置path,将多层次的对象平整化成一层结构。
3、可以在Camel case与Snake case之间,来回转换
4、还能跳过null、保留空对象、处理循环引用、指定序列化的深度等深层次的功能

8、Translations

"internationalization" (即i18n) ,语言本地化:
1、可以定义参数,来处理翻译中的变量问题:
$status = new TranslatableMessage('order.status', ['%status%' => $order->getStatus()], 'store');
2、支持在twig模板中,使用trans
3、支持定义全局用于翻译的参数
4、指定特定区域
5、设定备选的翻译
6、可以通过命令行找到某种语言中,未被翻译的词目
7、其他方便翻译的功能,比如找到拼写错误等

posted @ 2025-09-09 16:06  繁星灼灼  阅读(14)  评论(0)    收藏  举报