Php Yii2 RESTful:内容协商语言无法工作
我用Yii2中的模型实现了API Rest的结构。对于操作(索引、创建、更新等)和方法(GET、POST、PUT等),一切都非常有效,但我对Php Yii2 RESTful:内容协商语言无法工作,php,yii2,response,yii-rest,yii2-api,Php,Yii2,Response,Yii Rest,Yii2 Api,我用Yii2中的模型实现了API Rest的结构。对于操作(索引、创建、更新等)和方法(GET、POST、PUT等),一切都非常有效,但我对contentcongregator类有一个问题。 具体地说,如果我将GET作为参数传递给要翻译响应的语言,那么这将被忽略。 根据设置响应语言的文档,我们需要设置允许的contentcongregator(查看我的行为())语言,并提出如下请求: 但回应仍然是英语。为什么?不反对英语=) 这是我的ActiveController子类,它从yii\rest\
contentcongregator
类有一个问题。
具体地说,如果我将GET作为参数传递给要翻译响应的语言,那么这将被忽略。
根据设置响应语言的文档,我们需要设置允许的contentcongregator
(查看我的行为()
)语言,并提出如下请求:
但回应仍然是英语。为什么?不反对英语=)
这是我的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\contentcongregator
类进行调试,此时应用程序语言设置正确,但响应始终为英语
看起来有些内置错误没有翻译,例如
yii\rest\Action:103
throwsthrow new NotFoundHttpException(“未找到对象:$id”)
它没有翻译。您有不同的方法来解决此问题:
有关i18n的更多信息。写“但响应仍然是英文的”是什么意思。ContentCongregator只能设置lang应用程序字段。如果你需要翻译,你应该自己翻译。我的意思是答案还没有翻译成意大利语。我不能翻译你的自定义数据。我不是说自定义数据。我是指默认的响应消息,如“不允许使用方法”或“找不到页面”
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
}