在swoft2中如何配置HTTP Server(http server,php,swoft2,编程语言)

时间:2024-05-02 22:31:40 作者 : 石家庄SEO 分类 : 编程语言
  • TAG :

    %E5%9C%A8swoft2%E4%B8%AD%E5%A6%82%E4%BD%95%E9%85%8D%E7%BD%AEHTTP+Server

配置参数
在应用下的 app/bean.php 配置 server,在这个文件里,你可以看到 Http Server数组里面包含了 Http Server 的基本信息。下面列举了一些简单的配置,你也可以自由组合同时提供多种服务。


配置项 http server 除了 class 其他都是 http server 的属性。
配置介绍
class 指定 Http Server 的处理类
port 指定 Http Server 的端口
listener 指定其他一同启动的服务,添加端口服务监听,可以多个。
rpc 启动 RPC 服务
process 启动自定义用户进程
on 配置监听的事件 注册事件、设置对应事件的处理监听,事件触发组件调用,在任务里面使用
setting 这里是参考 Swoole Server 配置选项

pidFile 设置进程 pid 文件 位置,默认值@runtime/swoft.pid

mode 运行的模式,参考 Swoole Server 构造函数 第三个参数

type 指定Socket的类型,支持TCP、UDP、TCP6、UDP6、UnixSocket Stream/Dgram 等 Swoole Server 构造函数 第四个参数

启用 Https 支持 注意: 你必须安装 OpenSSL 库,并且确保安装 swoole 时是启用了 ssl 选项的。同时,需要设置 ‘type’ => SWOOLE_SOCK_TCP | SWOOLE_SSL

Controller 控制器
控制器作为HTTP服务的核心组件,串接起一次请求的整个生命周期. 通过 注解 的方式,相较于传统的 Controller,代码更简洁,用户可以更关注业务逻辑。
创建控制器
主要通过@Controller注解实现。代码可以放置任意位置,不过为了统一标准,建议放在 app/Http/Controller 下


代码分析
@Controller注解
Http 控制器类注解@Controller
注解类:Swoft\Http\Server\Annotation\Mapping\Controller

作用范围:CLASS

拥有属性:

prefix 指定路由前缀

通常仅有@Controller是没有什么效果的,它需要配合接下来的@RequestMapping一起才能正确的工作。

路由规则
显式指定路由前缀:@Controller(prefix=”/index”) 或@Controller(“/index”)。
隐式指定路由前缀:@Controller() 默认自动使用 小驼峰 格式解析 controller class 的名称。
示例:class IndexController 对应路由 /index
一个完整的路由规则是通过@Controller+@RequestMapping注解实现,通常前者定义前缀,后者定义后缀。关于@RequestMapping注解将在稍后 路由-@RequestMapping章节将会详细介绍。

在 Swoft 里不要按照传统的 fpm 框架继承父类控制器的成员属性在其他控制器使用,这种做法是错误的。
错误示范:


此时每次访问num数字都会增1,这个是错误的使用方式,和传统的 php-fpm 有很大区别.传统的 fpm 每次执行过后都会释放内存,而 swoft 是常驻内存的 大家一定要注意
路由
Swoft 与传统的 PHP 框架不一样,并没有采用配置文件的方式来配置路由,而采用了注解。在 Swoft 里我们可以使用@RequestMapping注解快速的添加路由。
@RequestMapping注解
Http 控制器类中方法路由注解@RequestMapping

route 路由规则path

method 请求方式(GET、POST、PUT、PATCH、DELETE、OPTIONS、HEAD)

params 可以通过它为path变量添加正则匹配限制

每个方法上尽量只写一个@RequestMapping注解,以免出现紊乱。
路由规则
通常情况,一个完整的路由 path 等于@Controller的 prefix +@RequestMapping的 route 显示指定路由后缀:@RequestMapping(“index”) 或@RequestMapping(route=”index”)
隐式指定路由后缀: 使用@RequestMapping() 默认解析方法名为后缀
特殊的,当你的@RequestMapping上的路由以 / 开头时,那完整的路由就是它,即不会再将 prefix 添加到它的前面
允许的请求方法为默认为 GET 和 POST 当设置跨域是需要手动指定允许 OPTIONS
绑定路由 path 参数
指定路由参数:@RequestMapping(route=”index/{name}”),Action 方法中可以直接使用 $name 作为方法参数
当路由参数被 [] 包起来则 URL path 传递参数是可选的。注意,可选符只能用在最后面

示例1:@RequestMapping(“/index[/{name}]”) 这样 /index /index/tom 都可以访问到

示例2:@RequestMapping(“/about[.html]”) 相当于伪静态,/about /about.html 都可以访问到

设置路由请求方式
如果想要设置允许请求控制器的 HTTP 请求方式。 可以使用方法在控制器中的@RequestMapping注解配置 method 参数,可以是 GET、POST、PUT、PATCH、DELETE、OPTIONS、HEAD 中的一个或多个。


请切记要引入相关的注解类


Http 请求对象
Swoft 的请求与响应实现于 PSR-7 规范。请求与响应对象存在于每次 HTTP 请求。

请求对象 Request 为 Swoft\Http\Message\Request

响应对象 Response 为 Swoft\Http\Message\Response

获取请求对象


示例: 获取请求的 URI


请求对象的 URI 本身就是一个对象,它提供了下列方法检查 HTTP 请求的 URL 部分


示例: 获取请求 Headers
全部的 Headers


指定的 Header


示例: 获取请求的数据
GET 数据


POST 数据


无需关心请求的数据格式,json xml 请求都会自动解析为 php 的数组数据。都可以通过 $request->post() 获取。
同时获取 GET & POST 数据


RAW 数据


SERVER 数据


获取上传文件


获取的结果是一维数组或者二位数组,数据结构如下。 若表单中上传的是单文件则返回的是一个一维数组,数组内容是 Swoft\Http\Message\Upload\UploadedFile 文件对象,例如文件字段名为 file 则数据结构如下
注意这个 UploadedFile 对象的属性都是私有属性,withdata过滤了私有属性所以直接输出 $file这个对象输出的是个空数组,而不是上传未接受到数据.
获取的结果是一维数组或者二位数组,数据结构如下。 若表单中上传的是单文件则返回的是一个一维数组,数组内容是 Swoft\Http\Message\Upload\UploadedFile 文件对象,例如文件字段名为 file 则数据结构如下


若表单中是一个字段数组上传多个文件如 file[] 则返回的是一个二维数组,数组内容依然是 Swoft\Http\Message\Upload\UploadedFile 文件对象,数据结构如下


文件操作方法
moveTo() 将上传的文件移动到新位置。
getSize() 获取文件大小,单位 byte。
getError() 获取上传文件相关的错误信息,若无错将必须返回 UPLOAD_ERR_OK 常量,若又错误将返回 UPLOAD_ERR_XXX 相关常量。
getClientFilename() 获取文件上传时客户端本地的文件名,不要相信此方法返回的值。客户端可能会发送恶意虚假文件名,意图破坏或破解您的应用程序。
getClientMediaType() 获取客户端中文件的 MediaType 类型,不要相信此方法返回的值。客户端可能会发送恶意虚假文件名,意图破坏或破解您的应用程序。
其他常用辅助方法


Http 响应对象
根据 PSR-7 对象的不可变性(immutable),所有的 with* 方法都是克隆对象然后返回,必须接收新对象来做进一步处理,或使用链式调用
例如:


获取响应对象


设置响应状态码


示例: 输出字符串内容响应


示例: 输出数组内容响应


示例: 设置响应头信息


示例: 重定向


示例: 文件下载


示例: 设置 Cookies

本文:在swoft2中如何配置HTTP Server的详细内容,希望对您有所帮助,信息来源于网络。
上一篇:如何使用maven setting.xml下一篇:

22 人围观 / 0 条评论 ↓快速评论↓

(必须)

(必须,保密)

阿狸1 阿狸2 阿狸3 阿狸4 阿狸5 阿狸6 阿狸7 阿狸8 阿狸9 阿狸10 阿狸11 阿狸12 阿狸13 阿狸14 阿狸15 阿狸16 阿狸17 阿狸18