没有命名空间的类 yii yii\base yii\behaviors yii\caching yii\captcha yii\console yii\console\controllers yii\console\widgets yii\data yii\db yii\db\conditions yii\db\cubrid yii\db\cubrid\conditions yii\db\mssql yii\db\mssql\conditions yii\db\mysql yii\db\oci yii\db\oci\conditions yii\db\pgsql yii\db\sqlite yii\db\sqlite\conditions yii\di yii\filters yii\filters\auth yii\grid yii\helpers yii\i18n yii\log yii\mail yii\mutex yii\rbac yii\rest yii\test yii\validators yii\web yii\widgets

Class yii\filters\ContentNegotiator

继承yii\filters\ContentNegotiator » yii\base\ActionFilter » yii\base\Behavior » yii\base\BaseObject
实现yii\base\BootstrapInterface, yii\base\Configurable
可用版本自2.0
源码 https://github.com/yiichina/yii2/blob/api/framework/filters/ContentNegotiator.php

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 参数 $languageParamAccept-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 程序用作操作筛选器。 在这种情况下,内容协商结果仅适用于相应的控制器或模块,或者 如果您配置过滤器的 onlyexcept 属性甚至还可以配置特定的操作。

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) 而值是相应的格式(例如 htmljson) 必须按照 yii\web\Response::$formatters 中的声明予以支持。 如果此属性为空或未设置,则将跳过响应格式协商。 yii\filters\ContentNegotiator
$languageParam string 指定 application language 的 GET 参数的名称。 请注意,如果指定的语言与 $languages 中的任何一种不匹配,将使用 $languages 的 第一种语言。如果参数值为空或此属性为空, 应用程序语言将仅根据Accept-Language HTTP header 确定。 yii\filters\ContentNegotiator
$languages array 支持的语言列表。数组键是受支持的语言变体(例如,en-GBen-US), 数组值是应用程序识别的相应语言代码(例如。 en, de)。 并非总是需要阵列密钥。当数组值没有键时,所请求的语言的匹配 将基于语言回退机制。例如,值 en 将要与 enen_USen-USen-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

属性详情

$formatParam 公共 属性

指定响应格式的 GET 参数的名称。 请注意如果 $formats 中不存在指定的格式, 则将引发 yii\web\UnsupportedMediaTypeHttpException 异常。如果参数值为空或此属性为空, 响应格式将仅根据 Accept HTTP header 确定。

参见 $formats.

public string $formatParam '_format'
$formats 公共 属性

支持的响应格式列表。键是MIME类型(例如 application/json) 而值是相应的格式(例如 htmljson) 必须按照 yii\web\Response::$formatters 中的声明予以支持。

如果此属性为空或未设置,则将跳过响应格式协商。

public array $formats null
$languageParam 公共 属性

指定 application language 的 GET 参数的名称。 请注意,如果指定的语言与 $languages 中的任何一种不匹配,将使用 $languages 的 第一种语言。如果参数值为空或此属性为空, 应用程序语言将仅根据Accept-Language HTTP header 确定。

参见 $languages.

public string $languageParam '_lang'
$languages 公共 属性

支持的语言列表。数组键是受支持的语言变体(例如,en-GBen-US), 数组值是应用程序识别的相应语言代码(例如。 en, de)。

并非总是需要阵列密钥。当数组值没有键时,所请求的语言的匹配 将基于语言回退机制。例如,值 en 将要与 enen_USen-USen-GB,等匹配。

如果此属性为空或未设置,则将跳过语言协商。

public array $languages null
$request 公共 属性

当前请求。如果未设置,将使用 request 应用程序组件。

public yii\web\Request $request null
$response 公共 属性

要发送的响应。如果未设置,将使用 response 应用程序组件。

方法详情

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.

public boolean beforeAction($action)
$action yii\base\Action

要执行的动作。

return boolean

该动作是否应继续执行。

bootstrap() 公共 方法

Bootstrap method to be called during application bootstrap stage.

public void bootstrap($app)
$app yii\base\Application

The application currently running

isLanguageSupported() 受保护 方法

返回一个值该值指示请求的语言是否与支持的语言匹配。

protected boolean isLanguageSupported($requested, $supported)
$requested string

请求的语言代码

$supported string

支持的语言代码

return boolean

是否支持所请求的语言

negotiate() 公共 方法

协商响应格式和应用程序语言。

public void negotiate()
negotiateContentType() 受保护 方法

协商响应格式。

protected void negotiateContentType($request, $response)
$request yii\web\Request
$response yii\web\Response
throws yii\web\BadRequestHttpException

如果接收到用于 GET 参数的数组 $formatParam

throws yii\web\UnsupportedMediaTypeHttpException

如果没有接受任何请求的内容类型。

negotiateLanguage() 受保护 方法

协商应用程序语言。

protected string negotiateLanguage($request)
$request yii\web\Request
return string

所选语言