Class yii\filters\ContentNegotiator
ContentNegotiator 支持响应格式协商和应用程序语言协商。
如果指定 supported formats 属性, ContentNegotiator 将支持
基于 GET 参数 $formatParam 的值和Accept
HTTP header 的响应格式协商。
如果找到匹配,yii\web\Response::$format 属性将设置为所选的格式。
yii\web\Response::$acceptMimeType 以及 yii\web\Response::$acceptParams 也将相应更新。
如果指定了 supported languages, ContentNegotiator 程序将支持
基于 GET 参数 $languageParam 和Accept-Language
HTTP header 的值进行应用程序语言协商。
如果找到匹配,yii\base\Application::$language 属性将设置为选择的语言。
您可以将 ContentNegotiator 程序用作引导组件和操作筛选器。
下面的代码显示如何将 ContentNegotiator 程序用作引导组件。注意在这种情况下, 内容协商适用于整个应用程序。
// in application configuration
use yii\web\Response;
return [
'bootstrap' => [
[
'class' => 'yii\filters\ContentNegotiator',
'formats' => [
'application/json' => Response::FORMAT_JSON,
'application/xml' => Response::FORMAT_XML,
],
'languages' => [
'en',
'de',
],
],
],
];
下面的代码显示了如何在控制器或模块中将 ContentNegotiator 程序用作操作筛选器。
在这种情况下,内容协商结果仅适用于相应的控制器或模块,或者
如果您配置过滤器的 only
或except
属性甚至还可以配置特定的操作。
use yii\web\Response;
public function behaviors()
{
return [
[
'class' => 'yii\filters\ContentNegotiator',
'only' => ['view', 'index'], // in a controller
// if in a module, use the following IDs for user actions
// 'only' => ['user/view', 'user/index']
'formats' => [
'application/json' => Response::FORMAT_JSON,
],
'languages' => [
'en',
'de',
],
],
];
}
公共属性
属性 | 类型 | 描述 | 被定义在 |
---|---|---|---|
$except | array | List of action IDs that this filter should not apply to. | yii\base\ActionFilter |
$formatParam | string | 指定响应格式的 GET 参数的名称。
请注意如果 $formats 中不存在指定的格式,
则将引发 yii\web\UnsupportedMediaTypeHttpException 异常。如果参数值为空或此属性为空,
响应格式将仅根据 Accept HTTP header 确定。 |
yii\filters\ContentNegotiator |
$formats | array | 支持的响应格式列表。键是MIME类型(例如 application/json )
而值是相应的格式(例如 html ,json )
必须按照 yii\web\Response::$formatters 中的声明予以支持。
如果此属性为空或未设置,则将跳过响应格式协商。 |
yii\filters\ContentNegotiator |
$languageParam | string | 指定 application language 的 GET 参数的名称。
请注意,如果指定的语言与 $languages 中的任何一种不匹配,将使用 $languages 的
第一种语言。如果参数值为空或此属性为空,
应用程序语言将仅根据Accept-Language HTTP header 确定。 |
yii\filters\ContentNegotiator |
$languages | array | 支持的语言列表。数组键是受支持的语言变体(例如,en-GB ,en-US ),
数组值是应用程序识别的相应语言代码(例如。 en , de )。
并非总是需要阵列密钥。当数组值没有键时,所请求的语言的匹配
将基于语言回退机制。例如,值 en 将要与 en ,en_US ,en-US ,en-GB ,等匹配。
如果此属性为空或未设置,则将跳过语言协商。 |
yii\filters\ContentNegotiator |
$only | array | List of action IDs that this filter should apply to. | yii\base\ActionFilter |
$owner | yii\base\Component|null | The owner of this behavior | yii\base\Behavior |
$request | yii\web\Request | 当前请求。如果未设置,将使用 request 应用程序组件。 |
yii\filters\ContentNegotiator |
$response | yii\web\Response | 要发送的响应。如果未设置,将使用 response 应用程序组件。 |
yii\filters\ContentNegotiator |
公共方法
方法 | 描述 | 被定义在 |
---|---|---|
__call() | Calls the named method which is not a class method. | yii\base\BaseObject |
__construct() | Constructor. | yii\base\BaseObject |
__get() | Returns the value of an object property. | yii\base\BaseObject |
__isset() | Checks if a property is set, i.e. defined and not null. | yii\base\BaseObject |
__set() | Sets value of an object property. | yii\base\BaseObject |
__unset() | Sets an object property to null. | yii\base\BaseObject |
afterAction() | 执行动作后立即调用此方法。 您可以覆盖此方法以对操作执行一些后处理。 | yii\base\ActionFilter |
afterFilter() | yii\base\ActionFilter | |
attach() | Attaches the behavior object to the component. | yii\base\Behavior |
beforeAction() | This method is invoked right before an action is to be executed (after all possible filters.) You may override this method to do last-minute preparation for the action. | yii\filters\ContentNegotiator |
beforeFilter() | yii\base\ActionFilter | |
bootstrap() | Bootstrap method to be called during application bootstrap stage. | yii\filters\ContentNegotiator |
canGetProperty() | Returns a value indicating whether a property can be read. | yii\base\BaseObject |
canSetProperty() | Returns a value indicating whether a property can be set. | yii\base\BaseObject |
className() | Returns the fully qualified name of this class. | yii\base\BaseObject |
detach() | Detaches the behavior object from the component. | yii\base\Behavior |
events() | Declares event handlers for the $owner's events. | yii\base\Behavior |
hasMethod() | Returns a value indicating whether a method is defined. | yii\base\BaseObject |
hasProperty() | Returns a value indicating whether a property is defined. | yii\base\BaseObject |
init() | Initializes the object. | yii\base\BaseObject |
negotiate() | 协商响应格式和应用程序语言。 | yii\filters\ContentNegotiator |
受保护的方法
方法 | 描述 | 被定义在 |
---|---|---|
getActionId() | 通过将 yii\base\Action::$uniqueId 转换为相对于模块的 ID 来返回动作 ID。 | yii\base\ActionFilter |
isActive() | 返回一个值,该值指示过滤器对于给定操作是否处于活动状态。 | yii\base\ActionFilter |
isLanguageSupported() | 返回一个值该值指示请求的语言是否与支持的语言匹配。 | yii\filters\ContentNegotiator |
negotiateContentType() | 协商响应格式。 | yii\filters\ContentNegotiator |
negotiateLanguage() | 协商应用程序语言。 | yii\filters\ContentNegotiator |
属性详情
指定响应格式的 GET 参数的名称。
请注意如果 $formats 中不存在指定的格式,
则将引发 yii\web\UnsupportedMediaTypeHttpException 异常。如果参数值为空或此属性为空,
响应格式将仅根据 Accept
HTTP header 确定。
参见 $formats.
支持的响应格式列表。键是MIME类型(例如 application/json
)
而值是相应的格式(例如 html
,json
)
必须按照 yii\web\Response::$formatters 中的声明予以支持。
如果此属性为空或未设置,则将跳过响应格式协商。
指定 application language 的 GET 参数的名称。
请注意,如果指定的语言与 $languages 中的任何一种不匹配,将使用 $languages 的
第一种语言。如果参数值为空或此属性为空,
应用程序语言将仅根据Accept-Language
HTTP header 确定。
参见 $languages.
支持的语言列表。数组键是受支持的语言变体(例如,en-GB
,en-US
),
数组值是应用程序识别的相应语言代码(例如。 en
, de
)。
并非总是需要阵列密钥。当数组值没有键时,所请求的语言的匹配
将基于语言回退机制。例如,值 en
将要与 en
,en_US
,en-US
,en-GB
,等匹配。
如果此属性为空或未设置,则将跳过语言协商。
当前请求。如果未设置,将使用 request
应用程序组件。
要发送的响应。如果未设置,将使用 response
应用程序组件。
方法详情
This method is invoked right before an action is to be executed (after all possible filters.) You may override this method to do last-minute preparation for the action.
public boolean beforeAction($action) | ||
$action | yii\base\Action | 要执行的动作。 |
return | boolean | 该动作是否应继续执行。 |
---|
Bootstrap method to be called during application bootstrap stage.
public void bootstrap($app) | ||
$app | yii\base\Application | The application currently running |
返回一个值该值指示请求的语言是否与支持的语言匹配。
protected boolean isLanguageSupported($requested, $supported) | ||
$requested | string | 请求的语言代码 |
$supported | string | 支持的语言代码 |
return | boolean | 是否支持所请求的语言 |
---|
协商响应格式和应用程序语言。
public void negotiate() |
协商响应格式。
protected void negotiateContentType($request, $response) | ||
$request | yii\web\Request | |
$response | yii\web\Response | |
throws | yii\web\BadRequestHttpException | 如果接收到用于 GET 参数的数组 $formatParam。 |
---|---|---|
throws | yii\web\UnsupportedMediaTypeHttpException | 如果没有接受任何请求的内容类型。 |
协商应用程序语言。
protected string negotiateLanguage($request) | ||
$request | yii\web\Request | |
return | string | 所选语言 |
---|