我用 Yii2 中的模型实现了 API Rest 的结构。一切都适用于操作(索引、创建、更新等...)和方法(GET、POST、PUT 等..),但我的ContentNegotiator
课程有问题。具体来说,如果我将要翻译响应的语言作为 GET 的参数传递,则将被忽略。根据设置响应语言的文档,我们需要设置允许的语言ContentNegotiator
(查看我的behaviors()
)并提出如下请求:
http://localhost/api/v1/users?_lang=it-IT
但回复仍然是英文。为什么???没有什么反对英语的=)
这是我的ActiveController
子类,从yii\rest\Controller
.
use yii\rest\ActiveController;
use yii\filters\VerbFilter;
class AActiveController extends ActiveController
{
public function behaviors()
{
$behaviors = parent::behaviors();
$behaviors['verbFilter'] = [
'class' => VerbFilter::className(),
'actions' => $this->verbs(),
];
$behaviors['contentNegotiator']['languages'] = [
'en-EN',
'it-IT',
'de-DE',
'ru-RU',
];
return $behaviors;
}
...
注意:我通过框架类进行调试yii\filters\ContentNegotiator
,此时应用程序语言设置正确,但响应始终为英语。
public function negotiate()
{
$request = $this->request ?: Yii::$app->getRequest();
$response = $this->response ?: Yii::$app->getResponse();
if (!empty($this->formats)) {
$this->negotiateContentType($request, $response);
}
if (!empty($this->languages)) {
Yii::$app->language = $this->negotiateLanguage($request);
}
debug(Yii::$app->language); // result OK!: it-IT
}