当前位置: 首页 > news >正文

Symfony学习笔记 - Symfony Documentation - Utilities(1)

1、Http Client

http client是Symfony提供的,可以包裹php流和curl的底层工具。
1、发送http request
$response = $client->request('GET', 'https://...', [ 'headers' => [ 'Accept' => 'application/json', ], ]);
2、认证
3、Query string parameter
4、定义发送http header
5、上传数据
6、发送cookies
7、重定向
8、重新发送失败的请求
9、http代理
10、处理响应
$response = $client->request('GET', 'https://...'); // gets the HTTP status code of the response $statusCode = $response->getStatusCode();
11、处理网络超时、错误等
12、限制请求的数目
。。。

2、Filesystem

提供与os无关的文件、目录的操作能力

3、ExpressionLanguage表达式语言

与eval相比较,ExpressionLanguage功能更加可控,保证不会执行危险的php语句。eval最好别用。ExpressionLanguage提供两种工作方式:
1、evaluation:表达式被评估,但是并不编译成php
2、compile:表达式被编译成php,因此可以被缓存和评估
3、parse和lint:解析和检查表达式

4、Lock锁

Symfony提供Lock的功能,负责对共享资源的排他性处理
`
$lock = $factory->createLock('pdf-creation');

if ($lock->acquire()) {
// The resource "pdf-creation" is locked.
// You can compute and generate the invoice safely here.

$lock->release();

}
`

5、Workflow 工作流

Symfony 的 Workflow 组件提供了一套完整的有限状态机(Finite State Machine)实现,用于管理对象的状态流转。 Symfony 原生只支持上述状态机和Workflow net。
1、Workflow:工作流是状态管理的最高层抽象,控制对象如何从一个状态转变到另一个状态
a、可以包含多个状态(Place)和转变(Transition)
b、支持两种类型:状态机(State Machine)和工作流网(Workflow Net)
c、可以附加事件监听器

2、State Machine (状态机)
Workflow 的一种类型,与Workflow的区别在于:状态机是单状态的,而工作流是多状态的。特点是:
a、任何时候对象只能处于一个状态(Place)
b、状态转变是明确的、离散的
c、适合建模有清晰状态边界的情况
比如,订单状态管理(新建、已支付、已发货等)。

3、Place (状态/位置)
对象可以处于的位置或状态。
a、在状态机中,一个对象同时只能在一个Place
b、在工作流网中,对象可以同时在多个Places
c、通常用字符串标识(如'draft'、'published')

4、Transition (转变)
从一个Place到另一个Place的转变规则:
a、名称(如'submit_for_review')
b、from: 起始Place(可以是数组)
c、to: 目标Place
d、guard: 可选的转变条件

5、Workflow Net(工作流网)
基于Petri网,支持多状态并行,比如合同审批的时候,需要法务部、财务部、技术部并行审批,在每个部门进行审批的时候,在每个部门里面,都有一个状态。

其他的工作流还包括:业务流程建模(BPMN)、有向无环图(DAG)、规则引擎驱动工作流等。
实际项目中,80%的业务场景用状态机就能满足,15%需要工作流网,只有约5%的超复杂流程需要专业工作流引擎解决方案。

6、UID / UUID

UUID时UID在软件行业最常用的方案。UUID有很多版本,从V1到V8,其中V7最被推荐使用。
$uuid = Uuid::v1();

7、PHP Polyfills

主要功能是在无法改变php运行环境的情况下,让旧版本PHP能够使用新版本PHP才有的函数和特性。

8、YAML Parser

YAML Parser将yaml格式的文件转换成php数组。

9、Webhook

简单来说,Webhook 是一种“反向 API”,是服务端主动向客户端发送消息的一种机制。​
当事件发生的时候,增加一个RemoteEvent消费者,对进来的webhook进行处理,具体处理的webhook和路径,可以在config/packages/framework.yaml进行配置。
`

[AsRemoteEventConsumer('mailer_mailgun')]

class WebhookListener implements ConsumerInterface
{
public function consume(RemoteEvent $event): void
{
if ($event instanceof MailerDeliveryEvent) {
$this->handleMailDelivery($event);
} elseif ($event instanceof MailerEngagementEvent) {
$this->handleMailEngagement($event);
} else {
// This is not an email event
return;
}
}
...
`

10、

http://www.wxhsa.cn/company.asp?id=217

相关文章:

  • IPv4向IPv6平滑过渡综合技术方案
  • TIA博图中的常用指令:定时器、计数器和触发器
  • Vue3项目开发专题精讲【左扬精讲】—— 企业网站系统(基于 Vue3 与 TypeScript 技术栈的企业网站系统开发实战)
  • Vue3项目开发专题精讲【左扬精讲】—— 商城网站系统(基于 Vue3 与 TypeScript 技术栈的企业网站系统开发实战)
  • $\LaTeX{}$之快速编译和删除中间文件 - Invinc
  • 我们一起“扒一扒”ReentrantLock:看看锁背后那些精妙的设计
  • win10使用openssl生成证书
  • $\LaTeX{}$之minted使用 - Invinc
  • linux服务器 系统服务文件
  • Codeforces Round 1049 (Div. 2) 部分题解
  • Critical Thinking Academic Writing
  • 1.3 课前问题思考
  • 【知识管理工具分享】基于AI搭建个人法律知识库:我的PandaWiki实践心得
  • 你的中间件一团糟-是时候修复它了-️
  • 超越-env-一份成熟的应用程序配置指南
  • 告别框架臃肿-我如何在不牺牲性能的情况下重新发现简单之美
  • 像元大小(例如 1.4 m 1.4 m)具体的含义和用途
  • Codeforces Round 1049 (Div. 2) 一些 idea
  • 医学如果不追求深入的话,其实门槛没有特别高
  • Canvas 的性能卓越,用它解决一个棘手的问题!
  • CSS Box-Sizing 详解:解决移动端布局溢出问题的关键
  • Visual Studio Code 开发环境搭建(Rust)
  • Spring Boot 项目中,同一个版本的依赖,内容却不一样?一次因依赖污染导致 Redis 启动失败的排查
  • 微信机器人开发文档
  • 从0到1:餐饮微信点餐小程序源码解析(含扫码点餐+外卖系统+后台管理)
  • 推荐一款线程or进程间数据同步解决方案
  • part 2
  • Apache服务器自动化运维与安全加固脚本详解
  • 无障碍资源导航
  • The 2022 ICPC Asia Shenyang Regional Contest