这篇不讲插件,讲一下 Yii2的请求(Requests),强行安利一波。
请求参数
要获取请求参数,你可以调用 request
组件的 get()
方法和 post()
方法。 他们分别返回 $_GET 和
$_POST
的值。例如:
如果嫌每次都要这么写一大堆很麻烦的话,下面就教你一个简单的。
首先你所有的Controller
都要继承一个BaseController
,然后在你的BaseController
里添加一下方法:
那么其他Controller
用的时候就可以直接这样写:
我上边只实例了 POST 请求,GET 请求同理,需要的话可以直接加上就可以了。
请求方法
你可以通过 Yii::$app->request->method 表达式来获取当前请求使用的HTTP方法。 这里还提供了一整套布尔属性用于检测当前请求是某种类型。 例如:
请求URLs
假设被请求的URL是 http://example.com/admin/index.php/product?id=100
,你可以像下面描述的那样获取URL的各个部分:
yii\web\Request::url
:返回/admin/index.php/product?id=100
, 此URL不包括host info
部分。yii\web\Request::absoluteUrl
:返回http://example.com/admin/index.php/product?id=100
, 包含host infode
的整个URL。yii\web\Request::hostInfo
:返回http://example.com
, 只有host info
部分。yii\web\Request::pathInfo
:返回/product
, 这个是入口脚本之后,问号之前(查询字符串)的部分。yii\web\Request::queryString
:返回id=100
,问号之后的部分。yii\web\Request::baseUrl
:返回/admin
,host info
之后, 入口脚本之前的部分。yii\web\Request::scriptUrl
:返回/admin/index.php
, 没有path info
和查询字符串部分。yii\web\Request::serverName
:返回example.com
, URL中的host name
。yii\web\Request::serverPort
:返回80
, 这是web
服务中使用的端口。
HTTP头
你可以通过 yii\web\Request::headers
属性返回的 header collection
获取HTTP
头信息。 例如:
请求组件也提供了支持快速访问常用头的方法,包括:
yii\web\Request::userAgent
:返回User-Agent
头。yii\web\Request::contentType
:返回Content-Type
头的值,Content-Type
是请求体中MIME类型数据。yii\web\Request::acceptableContentTypes
:返回用户可接受的内容MIME类型。 返回的类型是按照他们的质量得分来排序的。得分最高的类型将被最先返回。yii\web\Request::acceptableLanguages
:返回用户可接受的语言。 返回的语言是按照他们的偏好层次来排序的。第一个参数代表最优先的语言。
假如你的应用支持多语言,并且你想在终端用户最喜欢的语言中显示页面, 那么你可以使用语言协商方法 yii\web\Request::getPreferredLanguage()
。 这个方法通过 yii\web\Request::acceptableLanguages
在你的应用中所支持的语言列表里进行比较筛选,返回最适合的语言。
提示: 你也可以使用 ContentNegotiator 过滤器进行动态确定哪些内容类型和语言应该在响应中使用。 这个过滤器实现了上面介绍的内容协商的属性和方法。
客户端信息
你可以通过 yii\web\Request::userHost
和 yii\web\Request::userIP
分别获取host name
和客户机的IP地址, 例如: